一、窗口类结构体简介

窗口类结构体包含了窗口的各种参数信息。比如:窗口的图标、菜单栏、背景颜色、窗口的消息处理等等。

窗口类结构体有两个:WNDCLASS(早期版本) 和 WNDCLASSEX(新版本)。至于为什么有 WNDCLASSEX 还要保留老版本的 WNDCLASS?主要是为了兼容以前使用老版本开发的 Win32 程序才保留的。

二、窗口类结构体的成员变量

这里暂时只介绍新版本的 WNDCLASSEX,也更推荐使用新版本的。

typedef struct tagWNDCLASSEXW  {
UINT cbSize; // 窗口类结构体的内存大小(new)
UINT style; // 类风格
WNDPROC lpfnWndProc; // 窗口的处理过程
int cbClsExtra; // 指定紧随在 WNDCLASS 数据结构后分配的字节数
int cbWndExtra; // 指定紧随在窗口实例之后分配的字节数
HINSTANCE hInstance; // 窗口类所在模块的实例句柄
HICON hIcon; // 窗口类的图标
HCURSOR hCursor; // 窗口类的光标
HBRUSH hbrBackground; // 窗口类的背景画刷
LPCWSTR lpszMenuName; // 窗口类的菜单资源名
LPCWSTR lpszClassName; // 窗口类的名称
HICON hIconSm; // 窗口类的任务栏图标(new)
} WNDCLASSW

新版本比老版本只多了两个成员变量:cbSize 和 hIconSm。

三、窗口类结构体的使用

示例代码如下:

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);                 // 窗口类的消息处理过程

/* 新增版本的窗口类结构体 */
WNDCLASSEX wndclassex;
wndclassex.style = 0; // 窗口类型为缺省类型
wndclassex.lpfnWndProc = WndProc; // 定义窗口处理函数
wndclassex.cbClsExtra = 0; // 窗口类无扩展
wndclassex.cbWndExtra = 0; // 窗口实例无扩展
wndclassex.hInstance = hInstance; // 当前实例句柄
wndclassex.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 窗口的最小化图标为缺省图标
wndclassex.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗口采用箭头光标
wndclassex.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH)); // 窗口背景为白色
wndclassex.lpszMenuName = NULL; // 窗口无菜单
wndclassex.lpszClassName = L"CLASSNAME"; // 窗口类名 /* 新增的成员变量 */
wndclassex.cbSize = sizeof(WNDCLASSEX); // 窗口类的内存大小
wndclassex.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // 窗口类菜单栏的图标

参考:

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

Windows编程——窗口类的注册

Win32 程序开发:窗口类结构体 WNDCLASS 和 WNDCLASSEX的更多相关文章

  1. Win32 程序开发:创建一个应用程序窗口

    一.创建一个应用程序窗口 代码如下: // 头文件 #include <windows.h> // 全局变量 WCHAR g_lpszClassName[] = L"CLASSN ...

  2. win32程序之窗口程序,以及消息机制

    win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...

  3. Win32 程序开发入门:一个最简单的Win32程序

    一.什么是 Win32 Win32 是指 Microsoft Windows 操作系统的 32 位环境,与 Win64 都为 Windows 常见环境. 这里再介绍下 Win32 Applicatio ...

  4. 探索Win32系统之窗口类(转载)

    Window Classes in Win32 摘要 本文主要介绍win32系统里窗口类的运做和使用机制,探索一些细节问题,使win32窗口类的信息更加明朗化. 在本文中,"类", ...

  5. C语言Windows程序开发—TextOut函数介绍【第02天】

    (一)TextOut函数的参数介绍: BOOL TextOut ( //如果函数调用成功,返回TRUE,否则,返回FALSE HDC hdc, //用于显示字符串的控件ID int nXStart, ...

  6. win32程序之子窗口编程

    win32程序之子窗口编程 一丶简介.什么是子窗口 在前边我们已经讲解了窗口的本质.以及如何注册窗口类跟创建窗口. 还讲了消息循环. 那么有很多窗口其实Windows已经帮我们创建出来了.我们直接使用 ...

  7. Win32 程序在启动时激活前一个启动程序的窗口

    UWP 程序天生单实例.当然,新 API (10.0.17134)开始也提供了多实例功能.不过,传统 Win32 程序可就要自己来控制单实例了. 本文介绍简单的几个 Win32 方法调用,使 Win3 ...

  8. 什么是消息循环,一个简单的win32程序如何运行?

    预备知识 1.什么是句柄? (HANDLE) 在win32编程中有各种句柄,那么什么是句柄呢? #define DECLARE_HANDLE(name) struct name##_ { int un ...

  9. 窗口的子类化与超类化——子类化是窗口实例级别的,超类化是在窗口类(WNDCLASS)级别的

    1. 子类化 理论:子类化是这样一种技术,它允许一个应用程序截获发往另一个窗口的消息.一个应用程序通过截获属于另一个窗口的消息,从而实现增加.监视或者修改那个窗口的缺省行为.子类化是用来改变或者扩展一 ...

随机推荐

  1. Android Studio 使用Memory Monitor进行内存泄露分析

    在使用Android Studio进行内存泄露分析之前,我们先回顾一下Java相关的内存管理机制,然后再讲述一下内存分析工具如何使用. 一.Java内存管理机制 1. Java内存分配策略 Java ...

  2. MySQL多实例安装教程

    目录 MySQL的多实例 实验准备: 准备阶段: 实验阶段 MySQL的多实例 实验准备: 1. 一个干净的centos7系统 2. 关闭防火墙和selinux 3. 之前已经二进制安装过的MySQL ...

  3. MySQL数据库:函数的应用

    字符串截取 # 从左边开始 第1个字符 left(字段名,1) # 从那里开始,截取几个 substring(字段名,1,1) str函数 # 连接字符串 concat(s1,s2,s3,--,sn) ...

  4. Opencv中图像height width X 轴 Y轴 rows cols之间的对应关系

    这里做一个备忘录:

  5. layui多个时间选择器出现闪退问题

    1.出现问题的代码 laydate.render({ elem: '#startDate' // }); laydate.render({ elem: '#endDate' // }); laydat ...

  6. Map随笔:最常用的Map——HashMap

    目录 Map随笔:最常用的Map--HashMap 前言: 1,HashMap的结构 2,HashMap的一些属性(JDK8) 3,HashMap的构造函数(JDK8) 4,HashMap的一些方法( ...

  7. acwing 851. spfa求最短路 模板

    地址 https://www.acwing.com/problem/content/description/853/ 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出 ...

  8. 2019-2020-1 20199305《Linux内核原理与分析》第八周作业

    可执行程序的工作原理 (一)ELF目标文件 (1)什么是ELF? 这里先提一个常见的名词"目标文件",是指编译器生成的文件.ELF(Executable and Linkable ...

  9. oracle相邻表记录交换(单双两两交换)

    在博客园的博问中看到了一个这样的提问:一个表中有id和name两个字段,id是连续非空不重复的,想要交换相邻表记录的name值(单双两两交换). 另外,如果最后的单独行没有对应的下一行匹配记录的话,就 ...

  10. 面试:Stream#foreach方法摸底三问,你都了解吗

    JAVA8 新增了 Stream API,而在 Stream API 中又为程序员提供了一个遍历集合的 foreach 方法:java.util.stream.Stream#forEach. 那你对这 ...