您的位置:首页 > Web前端 > CSS

MFC中更改窗口的样式

2012-01-12 22:59 197 查看

一.下面给出具体如何通过代码设置对话框的外观

1.初始化的对话框没有边框,下面通过代码设置窗口的外观为有边框、有最小按钮和关闭按钮
//设置窗口的外观
DWORD  dwStyle  =  GetWindowLong(m_pwndVideo->GetSafeHwnd(),GWL_STYLE);
//dwStyle  &=  ~(DS_MODALFRAME  |  WS_POPUP  |   WS_CAPTION);
dwStyle |= (WS_CAPTION | WS_SYSMENU |WS_MINIMIZEBOX);
SetWindowLong(m_pwndVideo->GetSafeHwnd(),  GWL_STYLE,   dwStyle);
CRect rect;
m_pwndVideo->GetWindowRect(&rect);     //获取当前窗口的位置和大小
m_pwndVideo->SetWindowPos(NULL,300,300,rect.Width(),rect.Height(),SWP_DRAWFRAME);   //通知系统当前窗口风格已修改

2.与1相反,下面的代码去除之前设置的外观
DWORD  dwStyle  =  GetWindowLong(GetSafeHwnd(),GWL_STYLE);
dwStyle  &=   ~(WS_CAPTION| WS_SYSMENU | WS_MINIMIZEBOX);
SetWindowLong(GetSafeHwnd(),  GWL_STYLE,   dwStyle);
CRectrect;
GetWindowRect(&rect);
SetWindowPos(NULL,-1000, 0,rect.Width(),rect.Height(),SWP_DRAWFRAME);   //通知系统当前窗口风格已修改

二.下面给出相关的参考资料

1. SetWindowLong()更改窗口样式

可以使用 Windows SetWindowLong() 函数更改的查看器的主窗口样式。对于 SetWindowLong()原型是
LONG SetWindowLong(HWND hwnd, int nOffset, LONG nVal)
其中 hwnd 是窗口的句柄、 nOffset 是更改,值的偏移量和 nVal 是偏移量为新值。若要将窗口样式nOffset 为指定值-16 (这是
Windows 常量 GWL_STYLE 的值)。可能的值为 nVal 为的组合:
[/code]
WS_CLIPSIBLINGS: 0x04000000

WS_CLIPCHILDREN: 0x02000000

WS_VISIBLE: 0x10000000

WS_DISABLED: 0x08000000

WS_MINIMIZE: 0x20000000

WS_MAXIMIZE: 0x01000000

WS_CAPTION: 0x00C00000

WS_BORDER: 0x00800000

WS_DLGFRAME: 0x00400000

WS_VSCROLL: 0x00200000

WS_HSCROLL: 0x00100000

WS_SYSMENU: 0x00080000

WS_THICKFRAME: 0x00040000

WS_MINIMIZEBOX: 0x00020000

WS_MAXIMIZEBOX: 0x00010000

这些值将被组合只需通过 or。SetWindowLong() 每次调用完全用 nVal参数中指定的新样式替换上一个窗口的样式。

默认,主查看器窗口具有样式:WS_VISIBLE、 WS_CLIPSIBLINGS、 WS_CLIPCHILDREN、WS_CAPTION、 WS_SYSMENU、 WS_THICKFRAME、 WS_MINIMIZEBOX 和WS_MAXIMIZEBOX (也就是 nVal = 0x16CF0000)。

2.SetWindowPos()使更改后的样式生效

为导致重绘其样式在更改后立即在主窗口框架,您可能需要调用 Windows 函数 SetWindowPos()。

如下所示:SetWindowPos(hwndApp,0,0,0,0,0,39)

上面的 SetWindowPos() 调用等效于调用:

SetWindowPos(hwndApp,0,0,0,0,0,SWP_DRAWFRAME | SWP_NOMOVE |SWP_NOSIZE | SWP_NOZORDER)

3.下面的列表描述了上面提到的样式

WS_BORDER-创建一个窗口,有边框。

WS_CAPTION-创建一个具有标题栏 (隐含 WS_BORDER 样式) 的窗口。此样式不能用于 WS_DLGFRAME样式。

WS_CLIPCHILDREN-排除在父窗口中绘制时所占用的子窗口的区域。在创建父窗口时使用。

WS_CLIPSIBLINGS- 剪辑子窗口相对于彼此 ; 也就是当一个特定的子窗口接收绘制消息,WS_CLIPSIBLINGS样式剪辑子窗口进行更新的区域外的其他所有重叠的子窗口。(如果未指定WS_CLIPSIBLINGS,并且子窗口重叠它是可能,相邻的子窗口的工作区内绘制的子窗口的工作区内绘制时。用于 WS_CHILD样式。

WS_DISABLED-创建一个最初被禁用的窗口。

WS_DLGFRAME-创建一个窗口的双边框,但没有标题。

WS_HSCROLL-创建具有水平滚动条的窗口。

WS_MAXIMIZE-创建一个窗口的最大大小。

WS_MAXIMIZEBOX-创建一个窗口有最大化按钮。

WS_MINIMIZE-创建一个最初最小化的窗口。用于 WS_OVERLAPPED 样式。

WS_MINIMIZEBOX-创建具有最小化按钮的窗口。

WS_SYSMENU-创建一个有系统菜单框在其标题栏中的窗口。 仅用于带有标题栏的窗口。

WS_THICKFRAME-创建一个窗口,用较粗的框架,可用于调整窗口的大小。

WS_VISIBLE-创建一个初始可见的窗口。这适用于重叠,子,和弹出窗口。重叠的窗口的 y 参数用作 ShowWindow函数参数。

WS_VSCROLL-创建一个具有垂直滚动条的窗口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息