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-创建一个具有垂直滚动条的窗口。
相关文章推荐
- 更改 MFC 创建的窗口样式
- MFC中更改窗口样式
- MFC学习笔记之六————更改appwizard生成的窗口外观
- MFC学习笔记之六————更改appwizard生成的窗口外观
- 更改对话框和框架窗口图标 (VC/MFC)
- MFC单文档 取消标题栏,取消窗口边框,取消菜单栏, 取消莫名其妙的样式
- MFC 静态文本框使用/更改button背景色/不使能button/设置标题/不显示控件/窗口最大最小化
- MFC子线程更改图像数据后更新主窗口图像显示方法
- MFC中注册WNDCLASS样式并建立窗口
- MFC学习笔记之六————更改appwizard生成的窗口外观
- MFC 窗口样式
- MFC 更改默认窗口大小的方法
- VC/MFC程序开启关闭和打开自己或其他软件,更改窗口类
- MFC中注册WNDCLASS样式并建立窗口
- mfc笔记--父窗口 WS_CLIPCHILDREN 样式 对子窗口刷新的影响
- MFC9.0 更改窗口的初始化大小位置初探 (PreCreateWindow无效)
- MFC学习 修改窗口样式
- MFC中注册WNDCLASS样式并建立窗口(使用WNDCLASS创建无父窗口的窗口)
- MFC关闭进程和更改已知标题窗口的标题
- MFC 修改窗口样式