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:
win32消息传递和处理过程_第1张图片

其中 lpfnWndProc 为 消息的窗口处理函数,查看其结构:

win32消息传递和处理过程_第2张图片

之后注册和创建窗口,注意在调用消息处理函数之前对其进行声明,代码如下(注:回调函数只管提供地址,由windows负责调用):
 return DefWindowProc(hwnd,uMsg,wParam,lParam); 此行将自己不想处理的消息传给操作系统

win32消息传递和处理过程_第3张图片

win32消息传递和处理过程_第4张图片

窗口回调函数:
1.处理完的消息,必须return 0

2.只要自己不处理的函数都要加一句:return DefWindowProc(hwnd,uMsg,wParam,lParam);

可根据喜好更改窗口外观样式,详见Api

win32消息传递和处理过程_第5张图片

显示窗口和消息循环:

win32消息传递和处理过程_第6张图片

此时编译运行程序,我的第一个简单窗口就生成了。
win32消息传递和处理过程_第7张图片




需要注意:

窗口回调函数:

1.处理完的消息,必须return 0
2.只要自己不处理的函数都要加一句:return DefWindowProc(hwnd,uMsg,wParam,lParam);

你可能感兴趣的:(win32)