Windows API学习-MSG结构体和窗口过程详解(2)

WndProc 窗口过程
API.png

窗口过程一般定义为如下的形式:

LRESULT CALLBACK WndProc(
    HWND hwnd,  //窗口句柄
    UINT message,  //消息类型
    WPARAM wParam,  //附加消息1
    LPARAM lParam  //附加消息2
){
    // TODO
}

WndProc 的各个参数和 MSG 结构体的前四个字段是一一对应的。需要铭记的是:每产生一条消息,都会调用一次 WndProc 函数。

当用户点击按钮、编辑框、下拉列表框等控件的时候,会产生WM_COMMAND消息。对于不同来源的 WM_COMMAND 消息,wParam、lParam 参数也不同,见下表:

消息来源	wParam (高16位)	wParam (低16位)	lParam
菜单	0	菜单ID	0
快捷键	1	快捷键ID	0
控件	控件通知码	控件ID	控件句柄

注意:
上面说的菜单是指窗口标题下方、客户区上方的下拉菜单,而不是客户区的下拉列表框控件。
控件通知码用来识别控件的操作。例如 Button 控件一般有两种通知码,BN_CLICKED 和 BN_DOUBLECLICKED,前者表示 Button 被单击,后者表示 Button 被双击。

对于 Button 控件,我们可以通过LOWORD(wParam)来获取它的 ID,这就是上节最后一个例子的原理,请参考上节的代码体会。