【问题标题】:Is there any way to use WinForms to create a "dock"-like app that is able to open additional windows?有什么方法可以使用 WinForms 创建一个类似“dock”的应用程序,可以打开其他窗口?
【发布时间】:2019-05-02 21:02:26
【问题描述】:

所以,我正在尝试开发一个使用类似于 RocketDock 等其他程序的界面的程序。当程序运行时,它应该显示为没有边框或任何东西的垂直停靠。在“dock”内部将是一组图标,每个图标都打开一个窗口,除了码头。在窗口内,可以根据单击的图标执行不同的功能。我想我可以用 WinForms 做这样的事情,但我想创建一些只要程序正在运行就可以在桌面上持久保存的东西。这在 WinForms 中可行吗?有图书馆或什么可以帮助我吗?

我对我正在谈论的内容做了一个简短的草图。我希望这可以帮助澄清我的意思。

example sketch

我现在真的没有太多工作。我还在努力寻找一个起点。

【问题讨论】:

  • 查看这篇关于制作Application Desktop Toolbars(代码项目)的文章。
  • 这看起来像我在说什么。谢谢,我会调查的。

标签: c# windows winforms desktop-application software-design


【解决方案1】:

选中 Spy++ https://docs.microsoft.com/en-us/visualstudio/debugger/introducing-spy-increment?view=vs-2019 可用作了解产品上所有窗口样式的工具,以获取灵感。

检查使用 System.Windows.Forms.Form.CreateParams 是否足以扩充将要创建的窗口(在派生的 Form 类中覆盖它),例如:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    protected override CreateParams CreateParams
    {
        get
        {
            var r = base.CreateParams;
            r.ExStyle |= 0x88;
            return r;
        }
    }
}

在此处查看样式信息:

主题如此之大,需要您进行大量研究才能获得所需的结果,但这应该是一个良好的开端。

还值得注意的是,P/Invoke 允许您调用几乎任何 Win32 函数来使用无法通过 .NET API 获得的 Windows 行为。

【讨论】:

  • 谢谢。我认为这是一个很好的起点。我正在做这个项目来学习软件设计,所以我不知道从哪里开始。我知道我有很多阅读要做!
猜你喜欢
  • 1970-01-01
  • 2023-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多