隐藏标准标题栏时如何移动窗口

时间:2012-05-24 12:54:30

标签: c# .net winforms contextmenu draggable

在我的.net winform应用程序的标题栏中,我已经设置了一个Panel控件,它有很多其他控件。因此,当我单击Panel时,我没有获得上下文菜单或拖动功能。但是,当我在标题栏中点击面板外时,会出现同样的情况。

PS - 显然对于用户来说,应用程序顶部的整个栏都称为“标题栏”,他们希望标题栏上的任何地方都有拖动和上下文菜单(对于他们来说,包括Panel也是如此) 。)

有没有办法实现这一目标。我想在右键单击面板或面板中的任何控件时显示上下文菜单。我还想拖动整个应用程序窗口,当我尝试单击并拖动面板或面板中的任何控件时。

欣赏任何形式的帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

您必须将消息隧道传送到WndProc,因为“普通”标题栏会这样做。

声明:

private const int WM_SYSCOMMAND = 0x112;
private const int SC_MOUSEMOVE = 0xf012;
private const int SC_MOUSEMENU = 0xf090;

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg,
    IntPtr wParam, IntPtr lParam);

然后在Panel MouseDown处理程序上执行左键单击:

SendMessage(Handle, WM_SYSCOMMAND, new IntPtr(SC_MOUSEMOVE), IntPtr.Zero);

这是右键点击:

SendMessage(Handle, WM_SYSCOMMAND, new IntPtr(SC_MOUSEMENU), IntPtr.Zero);