1

是否有任何控件可以在没有标题栏(顶部)/根本没有框架的情况下移动窗口。

如您所知,我正在制作一个便笺应用程序,因此我希望它紧凑。

4

4 回答 4

4

您需要从 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 中看起来像是一个标题栏。

于 2009-08-22T19:12:03.960 回答
3

我为此编写了一个组件,您可以在此处找到它。

它可以用来移动任何控件,而不仅仅是一个窗口。您可以在代码中显式使用它,也可以将其放在设计器表面并EnableDragMove在窗口或控件上设置属性,如下所示:

截屏
(来源:thomaslevesque.com

于 2009-08-22T23:40:38.393 回答
0

在我告诉你之前尝试过这样的事情并不是特别容易。您需要做的是在 OnMouseDown/OnMouseMove/OnMouseUp 事件中提供给表单本身(或表单中的某些控件),当用户单击和拖动时更新控件的位置。据我所知,没有内置控件允许您单击并拖动标题以外的窗口。

于 2009-08-22T19:13:28.713 回答
0

如果您要从头开始构建应用程序,我建议您使用 WPF 创建它。

Todd Miranda 在 windowsclient.net 上有一个很好的演示,展示了如何在 windowsclient.net 上创建类似应用程序的小工具。

演示链接:http: //windowsclient.net/learn/video.aspx?v=5177

于 2009-08-22T20:52:58.123 回答