有什么方法可以使用 WinForms 创建一个类似于 "dock" 的应用程序,它能够打开额外的 windows?
Is there any way to use WinForms to create a "dock"-like app that is able to open additional windows?
所以,我正在尝试开发一个使用类似于 RocketDock 等其他程序的界面的程序。当程序为 运行 时,它应该显示为没有边框或任何东西的垂直停靠栏.在 "dock" 内将是一组图标,每个图标在停靠栏旁边打开一个 window。在 window 中,可以根据单击的图标执行不同的功能。我想我可以用 WinForms 做这样的事情,但我想创建一些东西,只要程序是 运行,就可以在桌面上持久存在。这在 WinForms 中可行吗?有没有图书馆之类的东西可以帮助我?
我对我正在谈论的内容做了一个速写。我希望这可以帮助阐明我的意思。
我现在真的没什么工作。我仍在努力找出一个起点。
检查 Spy++ https://docs.microsoft.com/en-us/visualstudio/debugger/introducing-spy-increment?view=vs-2019 用作了解产品上所有 window 样式的工具以获取灵感。
检查使用 System.Windows.Forms.Form.CreateParams 是否足以扩充将要创建的 window(在派生表单 class 中覆盖它),例如:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
var r = base.CreateParams;
r.ExStyle |= 0x88;
return r;
}
}
}
在此处查看样式信息:
- https://docs.microsoft.com/en-us/windows/desktop/winmsg/window-styles
- https://docs.microsoft.com/en-us/windows/desktop/winmsg/extended-window-styles
主题太大,需要您进行大量研究才能获得所需的结果,但这应该是一个好的开始。
还值得注意的是,P/Invoke 允许您调用几乎任何 Win32 函数来使用 Windows 无法通过 .NET API 获得的行为。
所以,我正在尝试开发一个使用类似于 RocketDock 等其他程序的界面的程序。当程序为 运行 时,它应该显示为没有边框或任何东西的垂直停靠栏.在 "dock" 内将是一组图标,每个图标在停靠栏旁边打开一个 window。在 window 中,可以根据单击的图标执行不同的功能。我想我可以用 WinForms 做这样的事情,但我想创建一些东西,只要程序是 运行,就可以在桌面上持久存在。这在 WinForms 中可行吗?有没有图书馆之类的东西可以帮助我?
我对我正在谈论的内容做了一个速写。我希望这可以帮助阐明我的意思。
我现在真的没什么工作。我仍在努力找出一个起点。
检查 Spy++ https://docs.microsoft.com/en-us/visualstudio/debugger/introducing-spy-increment?view=vs-2019 用作了解产品上所有 window 样式的工具以获取灵感。
检查使用 System.Windows.Forms.Form.CreateParams 是否足以扩充将要创建的 window(在派生表单 class 中覆盖它),例如:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
var r = base.CreateParams;
r.ExStyle |= 0x88;
return r;
}
}
}
在此处查看样式信息:
- https://docs.microsoft.com/en-us/windows/desktop/winmsg/window-styles
- https://docs.microsoft.com/en-us/windows/desktop/winmsg/extended-window-styles
主题太大,需要您进行大量研究才能获得所需的结果,但这应该是一个好的开始。
还值得注意的是,P/Invoke 允许您调用几乎任何 Win32 函数来使用 Windows 无法通过 .NET API 获得的行为。