1

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

PS - 显然对于用户来说,应用程序顶部的整个栏被称为“标题栏”,他们希望标题栏上到处都有拖动和上下文菜单(对他们来说,这也包括面板。)

那么有什么方法可以实现这一点。我希望右键单击面板或面板中的任何控件时出现上下文菜单。当我尝试单击并拖动面板或面板中的任何控件时,我还想拖动整个应用程序窗口。

感谢任何形式的帮助。谢谢!

4

1 回答 1

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);
于 2012-05-24T13:03:39.020 回答