标签:
一、Win32消息机制
1、消息机制
过程驱动:程序是按照我们预先定义好的顺序执行,每执行一步,下一步都已经按照预定的顺序继续执行,知道程序结束。
事件驱动:程序的执行顺序是无序的。某个时间点所执行的代码,是由外界通知。由于我们无法决定用户执行顺序,所以代码的执行也是无序。
Win32的消息机制 - 事件驱动
2、Win32消息程序
2.1、Win32窗口注册
2.2、Win32窗口创建
2.3、Win32消息循环
2.3.1、GetMessage
BOOL GetMessage(
LPMSG lpMsg, //存放获取到的消息数据
HWND hWnd, //获取消息的窗口句柄
UINT wMsgFilterMin, //消息过滤的起始消息
UINT wMsgFilterMax); //消息过滤的终止消息
返回值BOOL:成功获取消息,返回TRUE,但是当获取到WM_QUIT消息时,返回FALSE。
可以使用PostQuitMessage向窗口发送WM_QUIT消息。
MSG - 由系统填写关于消息的参数。
hWnd - GetMessage会根据hWnd值,接收由hWnd指定的窗口的消息。
wMsgFilterMin、wMsgFilterMax - 消息过滤器。
要求GetMessage接收指定范围的消息。
2.3.2、TranslateMessage
将键盘消息转换成字符消息。
1、首先检查是否是键盘按键消息
2、如果发现是键盘按键消息,将根据按键,产生一个字符消息,在下一个GetMessage执行时,会收到这个消息。
3、如果未发现按键消息,不做任何处理。
2.3.3、DispatchMessage
根据消息数据内窗口句柄,找到这个窗口的处理函数,调用处理函数,进行消息处理。
如果MSG中,HWND窗口句柄为空,DispatchMessage不做任何处理。
2.4、Win32基本消息
2.4.1、WM_DESTROY 窗口销毁时的消息,可以做退出或善后处理。
2.4.2、WM_CREATE 窗口创建后,是在窗口创建后,窗口处理函数收到的第一条消息。
可以在这个消息内做数据初始化/创建子窗口等。
WPARAM wParam - 不使用
LPARAM lParam - CREATESTRUCT指针
2.4.3、WM_SIZE
当窗口大小发生变化时,会收到这个消息。
可以在这个消息中调整窗口布局。
wParam - SIZE发生变化时的标识。
LOWORD(lParam); - 客户区的宽
HIWORD(lParam); - 客户区的高
2.4.4、WM_SYSCOMMAND
系统命令消息,当点击系统菜单和按钮时,会收到。
可以在这个消息中,提示用户保存数据等。
2.4.5、WM_PAINT:绘图消息
2.4.6、键盘消息
2.4.7、鼠标消息
2.4.8、WM_TIMER:定时器消息
2.5、消息结构
MSG - 消息结构
typedef struct {
HWND hwnd; //消息的窗口句柄
UINT message; //消息标示
WPARAM wParam; //消息的参数,32位
LPARAM lParam; //消息的参数,32位
DWORD time; //消息产生的时间
POINT pt; //消息产生时,鼠标的位置
} MSG, *PMSG;
2.6、消息的获取和发送
2.6.1、获取GetMessage/PeekMessage
GetMessage 获取消息,阻塞函数
PeekMessage获取消息,非阻塞函数
2.6.2、发送SendMessage/PostMessage
标签:
原文地址:http://www.cnblogs.com/gongyan/p/4354367.html