当前位置:C++技术网 > 资讯 > 各种窗口风格全面详细讲解

各种窗口风格全面详细讲解

更新时间:2015-06-25 19:20:09浏览次数:1+次

纯消息窗口
    只能接受和发送消息。不可见,无Z轴排序,不能枚举,不能接受广播消息。此窗口只是简单的分派消息。
    使用HWND_MESSAGE常量或者已存在的纯消息窗口句柄来创建。使用FindWindowEx函数指定HWND_MESSAGE到父窗口句柄参数来查找纯消息窗口。如果父窗口和随后的子窗口句柄参数都为空,则查找顶级窗口。

分层窗口
    分层窗口可以显著提高窗口的复杂生动的形状和透明混合视觉特效的表现。
    系统自动的组合和重绘分层窗口,可以平滑的渲染特效而不会引起客户区的闪烁。可以实现半透明效果。
    使用WS_EX_LAYERED扩展风格创建,或者创建后使用SetWindowLong设置,创建后不可见,调用SetLayeredWindowAttributes 或 UpdateLayeredWindow 才会使其可见。此风格不能用于子窗口。
    SetLayeredWindowAttributes 函数可以设置透明度和透明颜色,调用后,系统可能在窗口显示或者改变大小时要求窗口绘制。
    因为系统存储了分层窗口的映像,如果窗口的一部分的重绘是因为相关窗口在桌面的移动则系统不会要求窗口绘制。应用不需要重构绘制代码来满足透明特效,因为系统重定向了窗口绘制来调用SetLayeredWindowAttributes 到非显示内存并重组它去达到这个目的。
    想更快更有效或者每个像素都需要透明处理,调用UpdateLayeredWindow 。如果不想使用系统的重定向机制,则主要使用UpdateLayeredWindow 直接支持和满足分层窗口。使用UpdateLayeredWindow使用内存更高效,因为系统不需要额外的内存去存储重定向窗口的映像。要最大化窗口的效率,使用UpdateLayeredWindow改变位置和大小。注意,SetLayeredWindowAttributes 调用后,除非分层样式清除并再次设置后,随后调用UpdateLayeredWindow才会成功。
    击键测试时基于透明窗口和形状的。这意味着,如果窗口指定了色键或者通透值为0,将会使鼠标消息穿过。如果指定了WS_EX_TRANSPARENT扩展风格,这个窗口形状将忽略和将鼠标事件传递给底部的窗口。

重叠窗口
    最高层窗口,有标题栏、边框和客户区。作为主窗口。可以有菜单,最小化最大化按钮和滚动条。
    用WS_OVERLAPPED 或 WS_OVERLAPPEDWINDOW风格指定创建。前者只有标题栏和边框,后者有标题栏、大小调节边框、菜单、最大化和最小化按钮。

弹出窗口
    用于显示在主窗口外的对话框窗口、消息框和临时窗口,也是重叠式的。标题栏是可选的,也使用WS_OVERLAPPED风格创建。要包含标题栏,指定WS_CAPTION风格,使用WS_POPUPWINDOW风格可以创建含有边框和菜单的弹出窗口。WS_CAPTION必须与WS_POPUPWINDOW结合起来使用才能使菜单可见。

子窗口
    用WS_CHILD风格创建的窗口。仅限于父窗口客户区。如果只指定WS_CHILD风格而不指定父窗口,则系统不创建窗口。子窗口不能拥有菜单。
    如果子窗口是WS_CLIPCHILDREN风格,父窗口和兄弟窗口都不能在上面绘图,在子窗口上面的任何部分都会被剪切。
    SetParent 可以设置子窗口的父窗口,系统将子窗口从旧的父窗口客户区移到新的父窗口的客户区。如果指定的父窗口句柄为空,则桌面窗口变为父窗口。IsChild 判断是否为子窗口。
    系统直接把子窗口输入消息传递给子窗口,例外情况就是子窗口被禁用,此时输入消息则传递给父窗口。