Windows 的窗口总是基于窗口类来创建的,窗口类同时确定了处理窗口消息的窗口过程(回调函数)。

在创建应用程序窗口之前,必须调用 RegisterClass 函数来注册窗口类。该函数只需要一个参数,即指向 WNDCLASS 窗口类的指针。因为 WNDCLASS 类包含了窗口所拥有的基本属性。

结构原型:

  1. typedef struct tagWNDCLASSW {
  2. UINT        style;
  3. WNDPROC     lpfnWndProc;
  4. int         cbClsExtra;
  5. int         cbWndExtra;
  6. HINSTANCE   hInstance;
  7. HICON       hIcon;
  8. HCURSOR     hCursor;
  9. HBRUSH      hbrBackground;
  10. LPCWSTR     lpszMenuName;
  11. LPCWSTR     lpszClassName;
  12. } WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;

复制代码

成员解析:

成员 含义
style 指定窗口类型,各种“类风格”(详见下方↓)可以使用按位或操作符组合起来
lpfnWndProc 指定窗口过程(必须是回调函数)
cbClsExtra 预留的额外空间,一般为 0
cbWndExtra 预留的额外空间,一般为 0
hInstance 应用程序的实例句柄
hIcon 为所有基于该窗口类的窗口设定一个图标
hCursor 为所有基于该窗口类的窗口设定一个鼠标指针
hbrBackground 指定窗口背景色
lpszMenuName 指定窗口菜单
lpszClassName 指定窗口类名

style 类风格解析

类风格 含义
CS_VREDRAW 移动或者调整窗口的高度(垂直方向)时,重绘整个窗口
CS_HREDRAW 移动或者调整窗口的宽度(水平方向)时,重绘整个窗口
CS_DBLCLKS 当用户光标在窗口内双击时,允许发送双击消息给窗口过程
CS_OWNDC 给予每个窗口实例分配一个唯一的 DC(注意,尽管这样是很方便,但它必须慎重使用,因为每个 DC 大约要占 800 个字节的内存)
CS_CLASSDC 该窗口类的所有窗口实例都共享一个窗口类 DC
CS_PARENTDC 1. 将子窗口的裁剪区域设置到父窗口的 DC 中去,这样子窗口便可以在父窗口上绘制自身。(注意,这是子窗口还是从系统缓存中获取 DC,而不是使用父窗口的 DC。)
2. 指定该风格可以提高系统性能
CS_NOCLOSE 禁止系统菜单的关闭选项
CS_SAVEBITS 1. 以位图形式保存被该窗口遮挡的屏幕部分,这样当给窗口移动以后,系统便可以用该保存的位图恢复屏幕移动的相应部分,从而系统不用向被该窗口遮挡的窗口发送 WM_PAINT 消息
2. 该特性对于菜单类型的窗口比较合适,因为它通常是简短的显示一下之后便消失
3. 设置该特性将增加显示该窗口的时间,因为它通常要先分配保存位图的内存
CS_BYTEALIGNCLIENT 在字节边界上(在 x 方向上)定位窗口的用户区域的位置
CS_BYTEALIGNWINDOW 在字节边界上(在 x 方向上)定位窗口的位置
CS_GLOBALCLASS 1. 当调用 CreateWindow 或 CreateWindowEx 函数来创建窗口时允许它的 hInstance 参数和注册窗口类时传递给 RegisterClass 的 hInstance 参数不同
2. 如果不指定该风格,则这两个 hInstance 必须相同

【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

WNDCLASS 窗口类结构的更多相关文章

  1. Win32 程序开发:窗口类结构体 WNDCLASS 和 WNDCLASSEX

    一.窗口类结构体简介 窗口类结构体包含了窗口的各种参数信息.比如:窗口的图标.菜单栏.背景颜色.窗口的消息处理等等. 窗口类结构体有两个:WNDCLASS(早期版本) 和 WNDCLASSEX(新版本 ...

  2. 【Windows】Windows中的数据类型以及命名

    一.大写标示符 Windows中的很多标识符都是以两个或者三个大写字母作为前缀的,且其后紧跟一个下划线.这些标识符都是常量数值,前缀表明该常量的一般类别.如下 前缀 常量 CS(Class Style ...

  3. 消息机制 - Windows程序设计(SDK)004

    消息机制 让编程改变世界 Change the world by program 内容节选: 我们来回顾一下,窗口是怎么从代码中诞生出来的? 1. 首先我们是通过给 WNDCLASS 窗口类结构各个成 ...

  4. 《白手起家Win32SDK应用程序》(完整版+目录)

    <白手起家Win32SDK应用程序> 目 录 <白手起家Win32SDK应用程序> 第一篇.预备知识 第二篇.创建Win32工程和主函数 第三篇.增加一个回调函数 第四篇.注册 ...

  5. HelloWin详解

    (注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲) (注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲) (注意:遇到程序在弄懂之后一定要自己去敲,一定要 ...

  6. Windows核心编程随笔

    最近在学习Windows底层原理,准备写个系列文章分享给大家,Michael Li(微软实习期间的Mentor,为人超好)在知乎回答过一些关于学习Windows原理的书籍推荐,大家可以拜读其中一本来入 ...

  7. 《windows程序设计》第三章学习心得

    第三章是基于对一个windows窗口的学习,来达到对windows程序运行机制的理解. 从语言的角度看消息机制,Windows给程序发消息的本质就是调用"窗口过程"函数. Don' ...

  8. Windows程序设计学习笔记(1):一个简单的windows程序

    <Windows程序设计>(第五版)(美Charles Petzold著) #include<windows.h> LRESULT CALLBACK WndProc(HWND, ...

  9. Windows程序设计(第五版)学习:第三章 窗口与消息

        第三章 窗口与消息 1,windows窗口过程:应用程序所创建的每一个窗口都有一个与之关联的窗口过程,用于处理传递给窗口的消息. 2,窗口依据窗口类来创建.窗口类标识了用于处理传递给窗口的消息 ...

随机推荐

  1. (转)J2EE中13个规范

       今天在做连接oracle数据库的时候,感受到了什么是规范.平时听到别人说学习j2ee一定要学习他的十三个规范,大概的知道每个规范是做什么的,每个“接口”是做什么的.          很早就听过 ...

  2. HTML5 学习总结

    1,h5比原来的h4.0版本的页面头部更为简化, <!doctype html> <meta charset="utf-8"/>sublime中快速生成格式 ...

  3. NOIP2002-普及组复赛-第二题-级数求和

    题目描述 Description 已知:Sn= 1+1/2+1/3+…+1/n.显然对于任意一个整数K,当n足够大的时候,Sn大于K. 现给出一个整数K(1<=k<=15),要求计算出一个 ...

  4. Openjudge-计算概论(A)-DNA排序

    描述: 给出一系列基因序列,由A,C,G,T四种字符组成.对于每一个序列,定义其逆序对如下: 序列中任意一对字符X和Y,若Y在X的右边(不一定相邻)且Y < X,则称X和Y为一个逆序对. 例如G ...

  5. NYOJ-71 独木舟上的旅行 (贪心)

    独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别.一条独木舟最多只能乘坐两个人,且乘客 ...

  6. [css3动画]渐隐渐现

    测试 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  7. C#代码实现把网页文件保存为mht文件

    MHT叫“web单一文件”.顾名思义,就是把网页中包含得图片,CSS文件以及HTML文件全部放到一个MHT文件里面.而且浏览器可以直接读取得. 由于项目需要,需实现把指定的网页文件保存为mht文件.于 ...

  8. PeekMessage与GetMessage的对比

    PeekMessage与GetMessage的对比相同点:PeekMessage函数与GetMessage函数都用于查看应用程序消息队列,有消息时将队列中 的消息派发出去. 不同点:无论应用程序消息队 ...

  9. tree btn

    @*        <a href="javascript:void(0)" onclick="saveChecked()" ><img sr ...

  10. Android.mk编译APK范例

    以下仅是使用Android.mk编译APK程序的一些范例. 如果你想了解Android.mk的更多内容请参考<Android.mk简介> 一.编译一个简单的APK    LOCAL_PAT ...