2010-03-08 106 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