在我的.net winform应用程序的标题栏中,我已经设置了一个Panel控件,它有很多其他控件。因此,当我单击Panel时,我没有获得上下文菜单或拖动功能。但是,当我在标题栏中点击面板外时,会出现同样的情况。
PS - 显然对于用户来说,应用程序顶部的整个栏都称为“标题栏”,他们希望标题栏上的任何地方都有拖动和上下文菜单(对于他们来说,包括Panel也是如此) 。)有没有办法实现这一目标。我想在右键单击面板或面板中的任何控件时显示上下文菜单。我还想拖动整个应用程序窗口,当我尝试单击并拖动面板或面板中的任何控件时。
欣赏任何形式的帮助。谢谢!
答案 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);