正文

windows application和MFC application原理2006-01-15 15:57:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xiangyu/9658.html

分享到:

windows application的原理,其实主要就是依靠下面两个函数WinMain(hInst, hPrev, ...){   MSG msg;   RegisterClass(...);//定义窗口类的属性和行为(其实就是窗口函数)   CreateWindow(...);//产生窗口   ShowWindow(...);//显示窗口   UpdateWindow(...);//先传递WM_PAINT给窗口以驱动窗口的绘图操作   while(GetMessage(&msg...)) //从消息队列中取得消息   {       TranslateMessage(...);//转换键盘消息        //下面这个函数用于分派消息,借助USER模块的协助。       //当消息产生后,OS标志消息属于哪个窗口,而窗口类只有一个统一的窗口函数WndProc()       //这个知道消息属于哪个窗口就知道应该调用哪个窗口函数       DispatchMessage(...);   }   return msg.wParam;} //窗口函数,是一个回调函数(就是由你设计的,但是不是你调用,而是为系统准备的)WndProc(hwnd, msg, wParam, lParam){   switch (msg)   {       //case后面一般包含消息处理函数       case WM_CREATE: ...       case WM_COMMAND: ...       case WM_LBUTTONDOWN: ...       case WM_PAINT: ...       case WM_CLOSE: ...       case WM_DESTROY: ...       default: return DefWindowProc(...);   }   return(0);} MFC application其实也是windows application,它如何对windows application进行改进1.MFC把有着相当固定行为的WinMain()内部的操作封装在CWinApp类里面, MFC把有着相当固定行为的WndProc()内部的操作封装在CFrameWnd类里面, 2.MFC的主函数(实际上我们都没有见过,因为MFC把它隐藏了)AfxWinMain()只是扮演驾驭它们的角色 3.定义继承自CWinApp的CMYWinApp以及CMYWinApp的一个全局对象theApp(Wizard自动完成),CMYWinApp中的全局变量将因为全局对象theApp的诞生而获得配置和赋值 下面看看精简的AfxWinMain()int AFXAPI AfxWinMain (...){   CWinApp* pApp = AfxGetApp();//其实就是取得CMyWinApp对象指针   AfxWinInit(...);//RegisterClass包含在这里面    //下面这三个函数都是虚函数   pApp->InitApplication();//大部分情况下在CMyWinApp中并没有改写它   //在CWinApp中是空函数,所以在CMyWinApp一定要改写它。//在这个函数里面定义一个CMyFrameWnd的实例,从而调用CMyFrameWnd的构造函数,在//CMyFrameWnd的构造函数里面有一个Create(NULL, "Hello MFC", ...,)来完成窗口的创建。//具体的Create(NULL, "Hello MFC", ...,)的实现原理有兴趣请参考侯捷《深入浅出MFC》第六章//这里完成的功能其实就相当于上面windows中的CreateWindow。//InitInstance()除了完成了CreateWindow的功能外,里面还包含了//ShowWindow()和UpdateWindow();pApp->InitInstance(); //GetMessage,DispatchMessag包含在这个函数里面实现,具体的消息如何获得以及如何处理可请参考侯捷《深入浅出MFC》第六章//消息的处理考试应该会考,上课分析得也比较清楚   nReturnCode = pApp->Run();      AfxWinTerm();}

阅读(6212) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册