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();}

评论