win32消息传递和处理过程
Windows中的事件是一个”动作“,这个动作可能是用户操作应用程序产生的,也可能是Windows自己产生的,而消息用来记录和描述事件。
消息传递过程:
1.系统或用户触发的某个动作
2.系统将这些信息存储到MSG结构体中
3.系统将该消息存储到相关应用程序的消息队列中
4.while(GetMessage(&Msg,NULL,0,0)) //Msg是输出参数
{
TranslateMessage(&Msg); // 翻译消息
DispatchMessage(&Msg); //不调用处理函数,而是转回给操作系统,消息加工完毕
}
5.DispatchMessage将加工过的消息传递给操作系统
6.系统调用窗口过程函数
7.LRESULT CALLBACK WindowProc(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lparam
);
创建一个简单的窗口程序:
创建一个名为zzzz的win32应用程序工程,选择建一个简单的win32程序(省去加头文件步骤)。
首先要告诉windows我要创建的窗口是什么样的 ,WHDCLASS wndclass,查阅Api:
其中 lpfnWndProc 为 消息的窗口处理函数,查看其结构:
之后注册和创建窗口,注意在调用消息处理函数之前对其进行声明,代码如***:回调函数只管提供地址,由windows负责调用):
return DefWindowProc(hwnd,uMsg,wParam,lParam); 此行将自己不想处理的消息传给操作系统
窗口回调函数:
1.处理完的消息,必须return 0
2.只要自己不处理的函数都要加一句:return DefWindowProc(hwnd,uMsg,wParam,lParam);
可根据喜好更改窗口外观样式,详见Api
显示窗口和消息循环:
此时编译运行程序,我的第一个简单窗口就生成了。
需要注意:
窗口回调函数:
1.处理完的消息,必须return 0
2.只要自己不处理的函数都要加一句:return DefWindowProc(hwnd,uMsg,wParam,lParam);