我有一個窗口周圍有一個堅實的邊框。如何通過使用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