友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第18章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






       动系统。 



       可想而知,每一个Windows 程序都应该有一个回路如下: 



              MSG msg; 



              while  (GetMessage (&msg; NULL; NULL; NULL)) { 



                             TranslateMessage (&msg); 



                             DispatchMessage (&msg); 



              } 



       // 以上出现的函数都是Windows API 函数 



       消息,也就是上面出现的MSG 结构,其实是Windows  内定的一种资料格式: 



       /* Queued message structure */ 



              typedef struct tagMSG 



               { 



                      HWND hwnd; 



                      UINT message; // WM_xxx    WM_MOUSEMOVE  WM_SIZE。。。 

                                            ,例如              , 



                      WPARAM wParam; 



                      LPARAM lParam; 



                      DWORD time; 



                      POINT pt; 



               } MSG; 



                                                                                   7 


…………………………………………………………Page 70……………………………………………………………

接受并处理消息的主角就是窗口。每一个窗口都应该有一个函数负责处理消息,程序员 



必须负责设计这个所谓的「窗口函数」(window procedure,或称为window function )。 



如果窗口获得一个消息,这个窗口函数必须判断消息的类别,决定处理的方式。 



            Windows  

以上就是                   程序设计最重要的观念。至于窗口的产生与显示,十分简单,有专 



      API                                        Windows  

门的         函数负责。稍后我们就会看到                                     程序如何把这消息的取得、分派、处 



理动作表现出来。 



                                                                                    MYAPP。EXE 



                                                                             WinMain(hInst; hPrev; 。。。) 

                                                                              { 

                                                                             MSG  msg; 

                                       Messages from                         RegisterClass(。。。); 

                                      other windows                          CreateWindow(。。。); 

       Mouse        Keyboard                                                 ShowWindow(。。。); 

       Driver        Driver            PostMessage()                         UpdateWindow(。。。); 

                                                                             while(GetMessage(&msg。。。)) { 

                                                                                 TranslateMessage(。。。); 

                                                                                 DispatchMessage(。。。); 

   System                                           Application              } 

   message                                          message                  return msg。wParam; 

   queue                                            queue                    } 



                                                                          Window  Procedure 



                                                                           WndProc(hwnd; msg; wParam; lParam) 

                                                                           { 

                                                                           switch (msg) { 

                                                                               case WM_CREATE: 。。。 

                            USER              SendMessage()                    case WM_MAND: 。。。 

                            Module                                             case WM_LBUTTONDOWN: 。。。 

                                                                               case WM_PAINT: 。。。 

                                                                               case WM_CLOSE: 。。。 

                                                                               case WM_DESTROY: 。。。 

  Windows                                                                      default: return DefWindowProc(。。。); 

                                                                           } 

                                                                           return(0); 

                                                                           } 



               图1…2 Windows 程序的本体与操作系统之间的关系。 



                                                                                                                        8 


…………………………………………………………Page 71……………………………………………………………

一个具体而微的Win32 程序 



     许多相关书籍或文章尝试以各种方式简化Windows 程序的第一步,因为单单一个Hello 



     程序就要上百行,怕把大家吓坏了。我却宁愿各位早一点接触正统写法,早一点看到全 



     貌。Windows  的东西又多又杂,早一点一窥全貌是很有必要的。而且你会发现,经过有 



     条理的解释之后,程序代码的多寡其实构不成什么威胁(否则无字天书最适合程序员阅 



     读)。再说,上百行程序代码哪算得了什么! 



     你可以从图1…2 得窥Win32 应用程序的本体与操作系统之间的关系。Win32 程序中最 



     具代表意义的动作已经在该图显示出来,完整的程序代码展示于后。本章后续讨论都围绕 



     着此一程序。 



                makefile   makefile  

     稍后会出现一个          。关于        的语法,可能已经不再为大家所熟悉了。我想 



     我有必要做个说明。 



        makefile                              … 

     所谓       ,就是让你能够设定某个文件和某个文件相比  比较其产生日期。由其比 



     较结果来决定要不要做某些你所指定的动作。例如: 



     generic。res  : generic。rc generic。h 



     rc generic。rc 



                  :      generic。res      generic。rc  generic。h  

     意思就是拿冒号( )左边的              和冒号右边的           和       的文件日 



     期相比。只要右边任一文件比左边的文件更新,就执行下一行所指定的动作。这动作可 



                          rc generic。rc 

     以是任何命令列动作,本例为                。 



     因此,我们就可以把不同文件间的依存关系做一个整理,以makefile 
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!