常见得窗口样式应该怎么设置?
参考下面得定义
#define UI_WNDSTYLE_FRAME (WS_VISIBLE | WS_OVERLAPPEDWINDOW)
#define UI_WNDSTYLE_CHILD (WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN)
#define UI_WNDSTYLE_DIALOG (WS_VISIBLE | WS_POPUPWINDOW | WS_CAPTION | WS_DLGFRAME | WS_CLIPSIBLINGS | WS_CLIPCHILDREN)
父窗口
创建父窗口,样式一定要设置 WS_CLIPCHILDREN
样式,保障父子窗口重绘时UI正常,原理是父窗口不负责绘制与子窗口重叠得区域,由子窗口自己负责绘制。
常量名称 | 常量值 | 说明 |
---|---|---|
WS_OVERLAPPEDWINDOW | (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX) | 窗口是重叠的窗口。 与 WS_TILEDWINDOW 样式相同。 |
WS_POPUPWINDOW | (WS_POPUP | WS_BORDER | WS_SYSMENU) | 窗口是弹出窗口。 必须组合 WS_CAPTION 和 WS_POPUPWINDOW 样式以使窗口菜单可见。 |
WS_CAPTION | 0x00C00000L | 窗口具有标题栏(包括 WS_BORDER 样式)。窗口的移动通常是通过拖动窗口的标题栏来实现的。 |
WS_THICKFRAME | 0x00040000L | 窗口具有大小调整边框。 与 WS_SIZEBOX 样式相同。 |
层叠样式窗口和弹出样式窗口在Windows编程和用户界面中有着明显的区别:
层叠样式窗口:通常指的是具有标题栏、菜单栏和边框的标准窗口,它们可以重叠在屏幕上,用户可以通过标题栏来移动和调整窗口大小。层叠窗口默认带有工具栏和菜单栏,且可以采取默认尺寸和位置。在层叠排列时,所有窗口的标题栏都可见,但内容可能部分被遮挡。
弹出样式窗口:也被称为弹出窗口或对话框,它们通常有一个父窗口,并且没有菜单栏和工具栏。弹出窗口的Z序通常比其父窗口高,确保它们能够吸引用户的注意。创建时指定WS_POPUP风格即可创建弹出窗口。弹出窗口常用于需要用户进行确认或输入的场景,如消息框、对话框等。
子窗口
创建子窗口,样式一定要加上WS_CLIPSIBLINGS | WS_CLIPCHILDREN
可以保障父子窗口重绘UI正常,和大于等于2哥的兄弟姊妹窗口绘制正常(原理是子窗口之间如果由重叠区域,各自不绘制被重叠的区域)。
子窗口样式有:WS_CHILD
WS_CHILDWINDOW
两者含义相同,表示窗口是子窗口。
注意: 当窗口创建的样式采用了子窗口样式时,子窗口的活动区域是限制在父窗口的范围内的
如果不使用子窗口风格,子窗口的活动区域没有限制。
可以在这个窗口风格样式基础上增加 (WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN)
常量名称 | 常量值 | 说明 |
---|---|---|
WS_POPUP | 0x80000000L | 窗口是弹出窗口。 此样式不能与 WS_CHILD 样式一起使用。 |
问题
窗口创建时,如果窗口样式设置不当,会出现窗口显示不出来的问题,比如双屏不同分辨率之下,窗口的显示是否异常。
常量名称 | 常量值 | 说明 |
---|---|---|
WS_SYSMENU | 0x00080000L | 窗口是弹出窗口。 该窗口的标题栏上有一个窗口菜单。 还必须指定 WS_CAPTION 样式。 |
从上面的描述,可以看出,如果有WM_SYSMENU样式,但是没有WS_CAPTION样式,就会出问题。