MFC架构之CWinApp类

本文详细介绍了MFC中的CWinApp类,它是Windows应用程序的基础,包括成员变量、全局函数及可重载函数等内容,帮助开发者更好地理解并使用该类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 CWinApp是一个基类,你通过它来继承Windows应用程序对象。应用程序对象为你提供了初始化应用程序(以及它的每一个实例)和运行应用程序所需的成员函数。它实现主事件循环并把事件分发给MFC中其他类.
      每个使用微软基础类库的应用程序都只能包含一个从CWinApp继承的对象。当Windows调用WinMain函数时,这个对象在其它C++全局对象都已经生成并且可用之后才被创建,WinMain函数是由微软基础类库提供的。将你的CWinApp对象定义为全局的。
      当你从CWinApp继承应用程序类的时候,应重载InitInstance成员函数以创建应用程序的主窗口对象。
除了CWinApp的成员函数以外,微软基础类库还提供了以下全局函数,用于访问你的CWinApp对象以及其它全局信息:

1.成员变量

m_pszAppName       应用程序名称
m_hInstance        当前实例的句柄
m_hPrevInstance    上一个实例的句柄
m_lpCmdLine        用于调用的命令行的一个拷贝
m_nCmdShow         指定窗口初始时的显示方式
m_bHelpMode        如果应用程序处于Help文档模式则为TRUE
m_pActiveWnd       如果应用程序是OLE服务方式并且当前处于活动状态.则它指向容器主窗口
m_pszExeName       EXE文件的名称
m_pszHelpFilePath  程序的Help文件的路径
m_pszProfileName   应用程序的INI文件的名称
m_pszRegistryKey   应用程序的注册表键值

 

2.常用全局函数

AfxGetApp                       返回指向应用程序的CWinApp对象的指针.
AfxGetInstanceHandle    返回应用程序的实例的句柄.
GfxGetResoureHandle     返回程序的资源的句柄.
AfxGetAppName              返回应用程序的名称.

 

3.可重载函数

InitInstance                    可被重载以执行Windows的实例初始化,比如创建窗口对象
Run                                 运行缺省的消息循环。可被重载以定制消息循环
OnIdle                             可被重载以执行应用程序指定的空闲时处理
ExitInstance                    可被重载以在应用程序结束时执行清除操作
HideApplication               在关闭所有的文档之前隐藏应用程序

InitApplication                 初始化应用程序
CloseAllDocuments         关闭所有打开的文档
PreTranslateMessage     在消息被分派到Windows函数::TranslateMessage和::DispatchMessage之前过滤消息
SaveAllModified              提示用户保存所有改变了的文档
DoMessageBox              为应用程序实现AfxMessageBoxProcessMessageFilter在消息到达应用程序之前截取特定的消息
ProcessWndProcException 截取应用程序的消息和命令处理函数抛出的未被处理的异常
DoWaitCursor                打开或关闭等待光标
OnDDECommand           框架调用这个函数以响应动态数据交换(DDE)执行命令
WinHelp                         调用Windows的WinHelp函数

 

4.命令处理

OnFileNew                  实现ID_FILE_NEW命令
OnFileOpen                 实现ID_FILE_NEW命令
OnFilePrintSetup         实现ID_FILE_PRINT_SETUP命令
OnContextHelp           处理应用程序内的SHIFT+F1命令
OnHelp                        处理应用程序内的F1帮助命令(使用当前的上下文)
OnHelpIndex               处理ID_HELP_INDEX命令,提供缺省的帮助主题
OnHelpFinder              处理ID_HELP_FINDER和ID_DEFAULT_HELP命令
OnHelpUsing               处理ID_HELP_USING命令

 

本文转自:http://www.kaifa6.com/v/mfcshouce/class/CWinApp.htm

### MFC 中 `CFrameWnd` 和 `CWinApp` 的功能及使用方法 #### 关于 `CFrameWnd` `CFrameWnd` 是 Microsoft Foundation Classes (MFC) 库中的一个重要基,用于实现框架窗口的功能。它派生自 `CWnd` ,并提供了创建和管理主框架窗口所需的核心功能[^1]。 - **主要职责**: 它负责处理菜单、工具栏以及状态栏等界面组件的初始化与维护工作。此外,还支持文档/视图架构下的消息路由机制。 - **常见用途**: - 创建应用程序的主要窗口。 - 提供对标准命令的支持(如文件打开、保存等功能)。 - 处理窗口大小调整事件和其他用户交互操作。 以下是简单的代码示例展示如何继承并重载该的部分成员函数来定制行为: ```cpp class MyFrame : public CFrameWnd { public: MyFrame() { Create(NULL, _T("My Application")); } }; ``` 以上片段展示了通过调用 `Create()` 方法实例化一个新的框架窗体对象[^2]。 #### 针对 `CWinApp` 另一方面,`CWinApp` 则扮演着整个应用生命周期管理者的关键角色。每一个基于 MFC 构建的应用程序都至少会有一个从这个派生出来的子定义其全局属性和服务逻辑[^3]。 - **核心作用**: 初始化资源加载器;设置异常处理器;执行启动前后的清理动作等等。 - **典型场景**: 开发者通常会在自己的派生版本覆写某些虚函数比如 InitInstance(), ExitInstance() 来完成特定需求配置或者释放占用资源的任务。 下面给出一段基本模板说明怎样构建这样一个派生别及其必要组成部分: ```cpp class MyApp : public CWinApp { public: virtual BOOL InitInstance(); }; BOOL MyApp::InitInstance() { m_pMainWnd = new CFrameWnd; m_pMainWnd->LoadFrame(IDR_MAINFRAME); m_pMainWnd->ShowWindow(SW_SHOW); UpdateWindow(); return TRUE; } ``` 此段落解释了当项目运行时所经历的一系列重要阶段——即由操作系统触发至最终呈现给用户的图形界面为止的过程概述[^4]。 ### 结论部分 综上所述,在开发 Windows 平台上的 GUI 软件过程中,熟练掌握这两个基础构件的知识点对于提高工作效率至关重要。它们各自承担不同的使命却又紧密相连共同协作达成目标成果展现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值