隐藏标准标题栏时如何移动窗口
Posted
技术标签:
【中文标题】隐藏标准标题栏时如何移动窗口【英文标题】:How to move a window when the standard caption bar is hidden 【发布时间】:2012-05-31 01:29:14 【问题描述】:在我的 .net winform 应用程序的标题栏中,我放置了一个 Panel 控件,其中包含许多其他控件。因此,当我单击面板时,我没有获得上下文菜单或拖动功能。但是当我在标题栏的面板外部单击时,也会出现同样的情况。
PS - 显然对于用户来说,应用程序顶部的整个栏被称为“标题栏”,他们希望标题栏上到处都有拖动和上下文菜单(对他们来说,这也包括面板.)
那么有什么办法可以做到这一点。我希望右键单击面板或面板中的任何控件时出现上下文菜单。当我尝试单击并拖动面板或面板中的任何控件时,我还想拖动整个应用程序窗口。
感谢任何形式的帮助。谢谢!
【问题讨论】:
最佳方法列在***.com/questions/4577141/move-window-without-border的答案中 【参考方案1】:您必须像“正常”标题栏那样将消息传送到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);
【讨论】:
当我尝试使用您在此处拥有的关键字句柄时,它无法解析。 Handle住在哪里? 表单句柄,当然是在它创建之后(但如果窗口是可见的,那么它必须是)以上是关于隐藏标准标题栏时如何移动窗口的主要内容,如果未能解决你的问题,请参考以下文章