1、Windows 程序设计,主讲:刘永伟 L,2019/1/4,2,第2章 Windows应用程序的类封装,本章主要内容模仿MFC对框架应用程序类(CWinApp)、窗口类(CFrameWnd)、消息处理类(CCmdTarget)进行封装,2019/1/4,3,在第1章中,使用Windows API写了一个程序,此程序有以下特点:(1) 以WinMain作为入口 (2) 主程序中,分为创建窗口和消息循环两部分 (3) 创建窗口又分为 设计窗口类/注册窗口类/创建窗口/显示及更新窗口 四个步骤 (4) 在设计窗口类时,需要把定义的某回调函数作为窗口处理函数,2019/1/4,4,模拟MFC中类的封
2、装,(1) 把关于窗口的操作封装到FrameWnd类中-窗口类 (2) 把关于主函数WinMain封装为WinApp类-应用程序类,微软的AFX小组用面向对象的思想把API函数分类封装成各个C+类,并采用了类的继承技术,在基类上派生出子类。,2019/1/4,5,窗口类 class FrameWnd public:HWND m_hWnd;void DesignWindow();void RegisterWindow();void Create(LPCTSTR classname,LPCTSTR title); void ShowWindow() ; void UpdateWindow(); p
3、rivate:WNDCLASS w; ;,2019/1/4,6,应用程序类 class WinApp public:FrameWnd* m_pMainWnd;void InitInstance(); /创建窗口void Run(); /消息循环WinApp(); ;,2019/1/4,7,封装后WinMain的调用WinApp theApp; int WINAPI WinMain(.) theApp.InitInstance();theApp.Run();return 0; ,2019/1/4,8,改进(1) 解耦合WinApp theApp; int WINAPI WinMain(.) WinApp*p= GetApp();p-InitInstance();p-Run(); ,2019/1/4,9,改进(2) 灵活性 C+的派生(虚函数+重写),2019/1/4,10,改进(3) 把消息处理封装到CCmdTarget类中 class CmdTarget public:int WindowProc(.)switch(uMsg)case WM_LBUTTONDOWN:OnLButtonDown(.);break;return 0;void OnLButtonDown(.); ;,