我有一个窗口周围有一个坚实的边框。如何通过使用SetWindowLong和GetWindowLong删除边框(所有非客户区域)?删除窗口边框?
删除窗口边框?
回答
在C/C++
LONG lStyle = GetWindowLong(hwnd, GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
SetWindowLong(hwnd, GWL_STYLE, lStyle);
WS_CAPTION被定义为(WS_BORDER | WS_DLGFRAME)。当删除标题消失时,最小化最大化和系统菜单将消失,但您最好也可以删除它们。
最好还是删除扩展边框样式。
LONG lExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE);
SetWindowLong(hwnd, GWL_EXSTYLE, lExStyle);
最后,为了让你的窗口重新改变样式,你可以使用SetWindowPos。下面
SetWindowPos(hwnd, NULL, 0,0,0,0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
下德尔福代码做的:
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_BORDER and not WS_SIZEBOX and not WS_DLGFRAME);
SetWindowPos(Handle, HWND_TOP, Left, Top, Width, Height, SWP_FRAMECHANGED);
当然,这些API调用看起来一样在所有的语言。
这行代码删除任何给定的窗口的边框,只保留其客户:
SetWindowLong(hWnd /*The handle of the window to remove its borders*/, GWL_STYLE, WS_POPUP);
您可以使用WS_POPUPWINDOW
相反在SetWindowLong
功能的第三个参数。 它也移除了给定窗口的边界并且也起作用,但不同之处在于它还在窗口的其余客户端上画出了概述的黑色矩形。该轮廓矩形的厚度为1像素。 WS_POPUP
不绘制该矩形,实际上它不绘制任何东西,只是删除窗口的边框。
如果你即将即可返回窗口的边框,您可以使用该行的代码,我上面贴之前,先打电话该行的代码如下:
GetWindowLong(hWnd /*The handle of the window that you want to remove its borders and later return them back to it*/, GWL_STYLE);
,但当然,这个功能retuns窗口的样式,所以创建一个新的变量来保存这些样式,即将这个变量设置为该函数的返回值。
然后使用SetWindowLong
正如我上面showen删除其边界,当你想在以后恢复它的边界回来,只是重新召回SetWindowLong
,前两个参数是相同的(HWND和GWL_STYLE),但第三个参数是从GetWindowLong
返回的窗口样式。如果您不想拨打GetWindowLong
,但仍返回窗口的边界,则可以使用前两个参数相同的SetWindowLong
,在第三个参数中,可以使用以下其中一项:WS_OVERLAPPED
或/和WS_OVERLAPPEDWINDOW
或/和WS_SIZEFRAME
。
注:如果你尝试我的答案,但它不为你工作,这样就可以了,因为两者的功能SetWindowLong
和GetWindowLong
已经被取代和不为你工作,是因为他们与仅兼容32位版本的Windows。也许你正在使用64位版本的Windows,然后使用SetWindowLongPtr
和GetWindowLongPtr
代替,这与都32位和64位版本的Windows兼容。 MSDN通知备注部分有关这些功能。只需在该网站上搜索他们。下面是它们的链接:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms633584(v=vs.85).aspx
希望这所有的回答你的问题。
感谢您提醒使用'WS_POPUP',它是使用创建无边界窗口的单一方法。 – nekavally 2015-10-15 13:08:40
- 1. 正确删除窗口框架/边框
- 2. 删除特定窗口的边框
- 3. Chrome:删除窗口边框/装饰
- 4. JavaFX primaryStage删除窗口边框?
- 5. Python Tkinter:删除窗口边框
- 6. WPF:删除无边框窗口阴影没有定义镶边
- 7. ExtJS的4.2 - 删除窗口的边界?
- 8. 如何删除智能GWT中的窗口边框
- 9. 从特定类的窗口中删除边框
- 10. Qt:删除Widgets窗口中的边框(quickwidget示例)
- 11. 如何删除窗口标题和内容之间的边框
- 12. 如何删除模态窗口中的内容边框
- 13. 如何从自定义对话窗口中删除边框?
- 14. 无法从Tk窗口中删除边框
- 15. 如何删除窗口客户区的边框?
- 16. 移动另一个程序的窗口并删除边框
- 17. 从全屏只浮动窗口(XMonad配置)删除边框
- 18. 删除ActionBar边框
- 19. HTML边框删除
- 20. 删除textareafield边框
- 21. 删除EmptyDataTemplate边框
- 22. macOS窗口边框尺寸
- 23. 滚动窗口边框
- 24. Silverlight 3 oob窗口边框
- 25. Winform和WPF窗体/窗口边框
- 26. 在实际的窗口和边框之间创建嵌入窗口boxshadow边框
- 27. 如何从WPF窗体中删除边框/控件框?
- 28. 删除CSS中的边框
- 29. 删除AnchorTag IE边框
- 30. 删除EditText的边框
这已经过时 – 2013-09-08 06:46:23
@NathanGoings你能解释一下为什么这在你看来已经过时了,而最新的是什么? – RamboNo5 2014-05-09 11:06:54
@ RamboNo5:SetWindowLong()已被SetWindowLongPtr函数取代() – dns 2014-07-02 01:17:30