- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 Windows应用程序 的类封装 本章主要内容: 模仿MFC用C++类对Windows主函数进行封装 应用程序类CWinApp及其派生类 窗口类CFrameWnd及其派生类 CCmdTarget类 MFC消息映射 回顾: Windows 应用程序结构 至少包含两个函数 WinMain ( ) : 必有且仅有一个 窗口函数 : 每个窗口对应一个窗口函数,以响应该窗口的消息 WinMain( )函数需完成的功能 定义窗口类 注册窗口类 建立窗口类的窗口 显示窗口 运行消息循环 2.1? 应用程序主函数 的C++类封装 2.1? 应用程序主函数 的C++类封装 2.2? 派生类的应用 灵活性差,如改变窗口标题 利用C++类的继承性和多态性,程序员可以在已有的类的基础上派生自己的类。这样,程序员就可以在派生类中添加自己需要的成员,同时也可以对基类的函数进行重新定义(重写),以满足不同应用程序的需要。 2.2.1 应用程序类的派生类 获得应用程序对象指针函数AfxGetApp() 注意:在CWinApp的构造函数 主函数 //应用程序类 class CWinApp { public: CWinApp*m_pCurrentWinApp; public: CWinApp(); public: CFrameWnd*m_pMainWnd; public: virtual BOOL InitInstance (int nCmdShow); int Run(); }; //由CWinApp类派生CMyApp类 class CMyApp:public CWinApp { public: BOOL InitInstance(int nCmdShow); //重新定义InitInstance函数 }; 2.3? 窗口函数的封装 ——消息映射 Windows系统是一个事件驱动、消息循环的操作系统,消息是应用程序与操作系统交互的手段。消息的产生来源于系统事件和用户事件。消息处理是Windows应用程序的核心。 回顾:消息结构 在Windows中,用一个结构类型表示消息的常量值和与该消息相关的其他信息,它的具体定义如下: ? typedef struct tagMSG {// 消息结构 HWND?? hwnd;??? ? UINT?? message; WPARAM wParam; LPARAM lParam; DWORD? time; POINT? pt; } MSG; 2.3.1 消息处理函数的简单封装 2.3.2 消息映射 类消息处理函数 afx_msg void 消息处理函数名(); 类的消息映射表 用 DECLARE_MESSAGE_MAP来声明消息映射表 用 BEGIN_MESSAGE_MAP来定义链表节点和填写链表节点中数据,格式如下: BEGIN_MESSAGE_MAP(类名称,基类名称) 用 END_MESSAGE_MAP来表示消息映射函数表的结束 补充:命名规则 命名规则—示例 数据类型 定义 Win 32 变量名 BOOL int 32 位符号数 bOk INT int 32 位符号数 nCount UINT unsigned int 32 位无符号数 uMsg LONG long 32 位符号数 lTotalSize Afx函数 Afx是Application Framework的简写,以Afx开头的函数都是全局函数,可以在任一个类实现中调用。典型的如AfxMessageBox()、AfxGetApp()等。 上机 P35 例2-3 写报告 P47 例2-5 作业: P48 1、2、3、4 * * 窗口类CFrameWnd 应用程序类CWinApp 定义、注册窗口类RegisterWindow 建立窗口类的窗口Create 显示窗口ShowWindow 创建窗口对象InitInstance 消息循环Run 主函数WinMain 利用theApp对象 为了在主函数中使用应用程序类的对象,在主函数前定义应用程序类的全局对象 窗口类: class CFrameWnd { public: HWND hWnd;
文档评论(0)