2.01 注册窗口类

窗口类的概念

窗口类是包含窗口各种参数信息的数据结构

每个窗口都具有窗口类, 基于窗口类创建窗口

每个窗口类都有名称, 使用前需要注册到系统

分类

系统窗口类: 系统已经定义的窗口类, 所有应用程序可直接使用

应用程序全局窗口类: 需要用户自定义, 当前应用程序所有模块可使用

应用程序局部窗口类: 需要用户自定义, 当前应用程序本模块可使用

系统窗口类

直接使用,无需自己注册

如: 按钮, 编辑框

  1. CreateWindow("Button",...)

全局/局部窗口类

注册一个窗口类

  1. WNDCLASS wc = { 0 };
  2. wc.cbClsExtra = 0;
  3. wc.cbWndExtra = 0;
  4. wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  5. wc.hCursor = NULL;// 默认鼠标样式
  6. wc.hIcon = NULL;// Icon
  7. wc.hInstance = hIns;
  8. wc.lpfnWndProc = WndProd; //处理函数名称
  9. wc.lpszClassName = "Main";
  10. wc.lpszMenuName = NULL; // 不要菜单
  11. wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口水平/垂直变化时 重绘窗口
  12. RegisterClass(&wc); // 将以上赋值写入操作系统, 注册成功返回数字标识,失败返回0

WNDCLASS

  1. typedef struct _WNDCLASS {
  2. UINT style; // 窗口类风格
  3. WNDPROC lpfnWndProc; // 窗口处理函数
  4. int cbClsExtra; // 窗口类附加数据buff大小
  5. int cbWndExtra; // 窗口附加数据buff大小
  6. HINSTANCE hInstance; // 当前模块实例句柄
  7. HICON hIcon; // 窗口图标句柄
  8. HCURSOR hCursor; // 鼠标句柄
  9. HBRUSH hbrBackground;// 绘制窗口背景画刷句柄
  10. LPCWSTR lpszMenuName; // 窗口菜单资源ID字符串
  11. LPCWSTR lpszClassName; // 窗口类名称
  12. } WNDCLASSW, *PWNDCLASS

设置全局窗口类

  1. wc.style = CS_GLOBALCLASS | ...
  2. CS_HREDRAW | CS_VREDRAW : 水平垂直变换时,重绘窗口
  3. CS_DBLCKS: 允许窗口接收鼠标双击
  4. CS_NOCLOASE: 没有关闭按钮