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

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住在哪里? 表单句柄,当然是在它创建之后(但如果窗口是可见的,那么它必须是)

以上是关于隐藏标准标题栏时如何移动窗口的主要内容,如果未能解决你的问题,请参考以下文章

QT:标题栏隐藏图标和隐藏后移动窗口

如何限制从顶部定位我的标签,但在隐藏导航栏时不让它移动(因为它会调整视图高度)?

隐藏导航栏时UIButton向上移动

隐藏状态栏时,我的导航栏在 iOS7 中向上移动

滚动页面时隐藏jquery移动弹出窗口

在移动 Chrome 上隐藏键盘不会改变窗口高度