窗口
我们看到的应用程序就是窗口,Windows就是源于此。窗口分为客户区和非客户区,客户区是我们控制的程序内容,非客户区是Windows管理的,比如最小化,最大化等等。
句柄
句柄(Handle)是资源的标识号。窗口是通过窗口句柄(HWND)来标识的。似乎句柄类似于指针,但是不能理解为指针。书中说的很好,就是Windows资源的身份证。
消息队列
Windows操作系统是通过消息来进行程序与系统之间的通信的。这里引出了窗口过程函数。
消息投放到消息队列中,程序从消息队列中取出消息并响应。
消息的结构体是MSG。
每个程序启动后,系统都会为程序创建一个消息队列。Windows系统创建一个又一个消息,程序则从程序的消息队列中不断地消耗消息,这就是Windows程序的运行机制。
窗口创建四部曲
设计-注册-创建-显示与更新
设计
我们使用Winclassex结构体来创建窗口。
typedef struct tagWNDCLASSEXW {
UINT cbSize;
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCWSTR lpszMenuName;
LPCWSTR lpszClassName;
HICON hIconSm;
} WNDCLASSEXW, *PWNDCLASSEXW, *NPWNDCLASSEXW, *LPWNDCLASSEXW;
开始定义窗口
WNDCLASSEX wndClass = {
0 };
这行代码是用来初始化一个 WNDCLASSEX 结构体实例,wndClass。{ 0 } 将结构体的所有成员都设置为零,以确保它的初始状态是干净的。这样做可以避免使用未初始化的成员,减少潜在的错误。
WNDPROC lpfnWndProc 是一个指向窗口过程函数的回调函数,回调函数是不是有该函数的实现方调用的函数,是当某个事件发生后由另一方调用的的,用于对该事件进行响应。
#include <Windows.h>
#pragma comment(lib,"winmm.lib")
int WINAPI WinMain(</