2010-03-08 148 views

回答

46

在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); 
+1

這已經過時 – 2013-09-08 06:46:23

+3

@NathanGoings你能解釋一下爲什麼這在你看來已經過時了,而最新的是什麼? – RamboNo5 2014-05-09 11:06:54

+8

@ RamboNo5:SetWindowLong()已被SetWindowLongPtr函數取代() – dns 2014-07-02 01:17:30

8

下德爾福代碼做的:

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調用看起來一樣在所有的語言。

5

這行代碼刪除任何給定的窗口的邊框,只保留其客戶:

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

注:如果你嘗試我的答案,但它不爲你工作,這樣就可以了,因爲兩者的功能SetWindowLongGetWindowLong已經被取代和不爲你工作,是因爲他們與僅兼容32位版本的Windows。也許你正在使用64位版本的Windows,然後使用SetWindowLongPtrGetWindowLongPtr代替,這與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

希望這所有的回答你的問題。

+1

感謝您提醒使用'WS_POPUP',它是使用創建無邊界窗口的單一方法。 – nekavally 2015-10-15 13:08:40