是否有任何控件可以在没有标题栏(顶部)/根本没有框架的情况下移动窗口。
如您所知,我正在制作一个便笺应用程序,因此我希望它紧凑。
您需要从 WndProc 中的 WM_NCHITTEST 返回 HTCAPTION:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
const int WM_NCHITTEST = 0x0084;
const int HTCLIENT = 1;
const int HTCAPTION = 2;
protected override void WndProc(ref Message msg)
{
base.WndProc(ref msg);
if (msg.Msg == WM_NCHITTEST && msg.Result == (IntPtr)HTCLIENT)
{
msg.Result = (IntPtr)HTCAPTION;
}
}
}
这将使窗口的客户区在 Windows 中看起来像是一个标题栏。
我为此编写了一个组件,您可以在此处找到它。
它可以用来移动任何控件,而不仅仅是一个窗口。您可以在代码中显式使用它,也可以将其放在设计器表面并EnableDragMove
在窗口或控件上设置属性,如下所示:
(来源:thomaslevesque.com)
在我告诉你之前尝试过这样的事情并不是特别容易。您需要做的是在 OnMouseDown/OnMouseMove/OnMouseUp 事件中提供给表单本身(或表单中的某些控件),当用户单击和拖动时更新控件的位置。据我所知,没有内置控件允许您单击并拖动标题以外的窗口。
如果您要从头开始构建应用程序,我建议您使用 WPF 创建它。
Todd Miranda 在 windowsclient.net 上有一个很好的演示,展示了如何在 windowsclient.net 上创建类似应用程序的小工具。
演示链接:http: //windowsclient.net/learn/video.aspx?v=5177