MFC中更改窗口的样式

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

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 为的组合: 
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-创建一个具有垂直滚动条的窗口。

你可能感兴趣的:(MFC中更改窗口的样式)