Windows编程-消息处理

windows通用消息

通用消息标志都定义在WINUSER.H中,以WM_开头,大概分为三类

1 窗口消息

如:VM_CREATE(窗口创建),VM_CLOSE(窗口关闭)

2 命令消息

特指:VM_COMMAND消息,与处理用户请求有关,如点击工具栏等

3 通知消息

特指VM_NOTIFY消息,只使用Windows的公用控件,如列表,视图等等

Windows控件消息

控件消息是用来控制一些行为的,不同的控件有不同的消息控制

BM_按钮控制消息

EM_编辑框控件消息

STM_静态文本控制消息

CM_组合框控制消息

LBM_列表框控制消息

用户自定义消息

除了Windows消息外,也可以自己定义消息,系统的消息在0~WM_USER之间,自己定义的消息大于WM_USER就好

消息的发生

PostMessage、SendMessage

PostMessage会将消息发送到消息队列,然后操作系统会把消息又发送到应用程序的消息队列里面,然后应用程序再获取消息再调用回调函数处理消息

SendMessage相当于直接调用窗口的回调函数。

回调函数-消息处理函数

LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)

这个函数是用来处理消息的,里面的值第一个是表示对应的窗口的句柄,第二个是消息的结构体,第三个和第四个是消息的附加结构体,每个消息类型的第三个和第四个参数都不一样。

定义自己的消息

参考消息处理函数的参数来生成对应的变量, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam

意味着需要传这四个,第一个表示是句柄不用,第二个第三个第四个需要自己建立。这里我只用uMsg消息编号不要后面的

const UINT WM_MYMSG = WM_USER + 1;

然后再在消息处理函数里面添加WM_MYMSG的处理函数就好了。