VC++学习笔记之消息处理机制和窗口过程函数

先上张图

一、消息处理机制
      (1)操作系统接收到应用程序的“窗口消息”,将消息投递到该应用程序的消息队列中。
      (2)应用程序在消息循环中调用GetMessage函数,从消息队列中取出一条一条的消息。取出消息后,应用程序可以对消息进行一些预处理,例如,放弃对某些消息的响应,或者调用TranslateMessage产生新的消息。
         BOOL GetMessage(
                            LPMSG lpMsg,     //消息(MSG)结构体对象
                            HWND hWnd,   //指定接收那个窗口的消息
                            UINT wMsgFilterMin,   //获取消息的最小值
                            UINT wMsgFilterMax   //获取消息的最大值
         );
         TranslateMessage函数用于将虚拟键消息转换为字符消息。
         DispachMessage函数分派一个消息到窗口过程,由窗口过程函数对消息进行处理。
         获取消息还可以使用“PeekMessage”函数。
      (3)应用程序调用DispatchMessage,将消息回传给操作系统。消息是由MSG结构体对象来表示的,其中就包含了接收消息的窗口的句柄。因此,DispatchMessage函数总能进行正确的传递。
      (4)系统利用“WNDCLASS结构体”的“lpfnWndProc成员”保存的窗口过程函数的“指针”,调用窗口过程,对消息进行处理(即“系统给应用程序发送了消息”)。

二、窗口的过程函数
        窗口过程函数的声明如下:
        LRESULT   CALLBACK    WindowProc(
        HWND    hwnd,    //对应消息的窗口句柄
        UINT       uMsg,    //消息代码
        WPARAM    wParam,  //消息代码附加参数
        LPARAM     lParam    //消息代码附加参数
        );
        在窗口过程函数内部使用switch/case语句来确定窗口过程接收的是什么消息,以及如何对这个消息进行处理。
        比如:
        LRESULT CALLBACK   WinSunProc( HWND hwnd , UINT uMsg, WPARAM wParam , LPARAM lParam )
       {
               switch(uMsg)
               {
                       case WM_CHAR:
                                 .................................
                       case WM_LBUTTONDOWN:
                                  ......................................
                       case  WM_DESTROY:
                                  ..................................
                         default:
                                  .................................
                }
                return 0;
       }

朋友,如果您有什么真知灼见,可以加“新浪微博”/MSN哦,starrycheng@live.com,我们大家一起讨论,一起研究。

最后,帮忙加一分吧,想整个空间系统。

原文地址:https://www.cnblogs.com/ssol/p/2249881.html