MFC中的几个经常使用类——CWinApp

1 概述

1.1 基本信息

CWinApp为应用程序类
MFC 中的主应用程序类封装用于 Windows 操做系统的应用程序的初始化、运行和终止。基于 框架生成的应用程序必须有且仅有一个从 CWinApp 派生的类的对象。在建立窗口以前先构造该对象。
CWinApp 是从 CWinThread 派生的,后者表示可能具备一个或多个线程的应用程序的主执行线程。在最新版本的 MFC 中,InitInstance、Run、ExitInstance 和 OnIdle 成员函数实际位于 CWinThread 类中。此处将这些函数做为 CWinApp 成员来探讨,由于探讨所关心的是对象做为应用程序对象而不是 主线程的角色。

1.2 注意

应用程序类构成应用程序的主执行线程。使用 Win32 API 函数还能够建立辅助执行线程。这些线程可使用 MFC 库。有关更多信息,请参见多线程编程。
与用于 Windows 操做系统的任何程序同样,框架应用程序也具备 WinMain 函数。但在框架应用程序中没必要编写 WinMain。它由类库提供,并在应用程序启动时调用。WinMain 执行注册 窗口类等标准服务。而后它调用应用程序对象的成员函数来初始化和运行应用程序。(可经过重写由 WinMain 调用的 CWinApp 成员函数来自定义 WinMain。)
为初始化应用程序,WinMain 调用应用程序对象的 InitApplication 和 InitInstance 成员函数。为运行应用程序的 消息循环,WinMain 调用 Run 成员函数。在终止时,WinMain 调用应用程序对象的 ExitInstance 成员函数。

2 执行顺序

注意 本文中以粗体显示的名称指示由 Microsoft 基础类库和 Visual C++ 提供的元素。以 monospaced 类型显示的名称指示您建立或重写的元素。
基于MFC的应用程序有一个 应用对象,它是CWinApp派生类的对象,该对象表明了应用进程的 主线程。当线程执行完并退出线程时,因为进程中没有其余线程存在,进程自动结束。类CWinApp从CWinThread派生出来,CWinThread是 用户接口线程的基本类。咱们在编写用户接口线程时,须要从CWinThread派生咱们本身的线程类,ClassWizard能够帮助咱们完成这个工做。
先用ClassWizard派生一个新的类,设置 基类为CwinThread。注意:类的DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏是必需的,由于建立线程时须要动态建立类的对象。根据须要可将初始化和结束代码分别放在类的InitInstance和ExitInstance函数中。若是须要建立窗口,则可在InitInstance函数中完成。而后建立线程并启动线程。能够用两种方法来建立 用户接口线程,MFC提供了两个版本的AfxBeginThread函数,其中一个用于建立用户接口线程。第二种方法分为两步进行:首先,调用线程类的 构造函数建立一个线程对象;其次,调用CWinThread::CreateThread函数来建立该线程。线程创建并启动后,在线程函数执行过程当中一直有效。若是是线程对象,则在对象删除以前,先结束线程。CWinThread已经为咱们完成了线程结束的工做。

3 CWinApp类成员

3.1 数据成员

m_pszAppName
指定了应用程序的名字


m_hInstance
标识了应用程序的当前实例
m_hPrevInstance
在32位应用程序中被设为NULL
m_lpCmdLine
指向一个以null结尾的字符串,指定了应用程序的命令行
m_nCmdShow
指定最初如何显示窗口
m_bHelpMode
指明用户是否处于Help上下文模式(一般用SHIFT+F1激活)
m_pActiveWnd
当一个OLE服务器是现场可激活时,它指向容器应用程序的主窗口
m_pszExeName
应用程序的模块名字
m_pszHelpFilePath
应用程序的帮助文件的路径
m_pszProfileName
应用程序的。INI文件名
m_pszRegistryKey
用于肯定保存应用程序主要设置的完整的注册表键
m_pDocManager
用于保存文档模板管理类的指针(MSDN中没有这个数据成员)

3.2 构造函数

CWinApp 构造一个CWinApp对象

3.3 操做符

载入光标资源
载入WINDOWS.H中IDC_常量所指定的Windows预约义光标
LoadOEMCursor
载入WINDOWS.H中OCR_常量所指定的WindowsOEM预约义光标
载入图标资源
LoadStandardIcon
载入WINDOWS.H中IDI_常量所指定的Windows预约义图标
LoadOEMIcon
载入WINDOWS.H中OIC_常量所指定的WindowsOEM预约义图标
检查应用程序的命令行是否指定/Automation选项。已不用。应当在调用ParseCommandLine以后使用CCommandLineInfo::m_bRunEmbedded中的值
RunEmbedded
检查应用程序的命令行是否指定/Embedding选项。已不用。应当在调用ParseCommandLine以后使用CCommandLineInfo::m_bRunEmbedded中的值
ParseCommandLine
解析命令行中的每一个参数和标志
ProcessShellCommand
处理命令行参数和标志
从应用程序的。INI文件的一个入口中获取一个整数
WriteProfileInt
将一个整数写到应用程序的。INI文件的入口
从应用程序的。INI文件的一个入口中获取一个字符串
将一个字符串写到应用程序的。INI文件的入口
将一个文档模板加到应用程序的可用文档模板列表中
GetFirstDocTemplatePosition
获取第一个文档模板的位置
GetNextDocTemplate
得到文档模板的位置。能够递归调用
由框架调用,用以从文件打开一个文档
将一个文件名加入最近使用(MRU)的文件列表
SelectPrinter
选择先前由用户在打印对话框中指定的打印机
建立一个打印机设备环境
GetPrinterDeviceDefaults
得到缺省的打印机设备

3.4 可重载的函数

可被重载以执行Windows的实例初始化,好比建立窗口对象
InitApplication 初始化.
Run
运行缺省的消息循环。可被重载以定制消息循环
OnIdle
可被重载以执行应用程序指定的空闲时处理
可被重载以在应用程序结束时执行清除操做
在关闭全部的文档以前隐藏应用程序
关闭全部打开的文档
在消息被分派到Windows函数::TranslateMessage和::DispatchMessage以前过滤消息
SaveAllModified
提示用户保存全部改变了的文档
为应用程序实现 AfxMessageBox
在消息到达应用程序以前截取特定的消息
ProcessWndProcException
截取应用程序的消息和命令处理函数抛出的未被处理的异常
打开或关闭等待光标
OnDDECommand
框架调用这个函数以响应动态数据交换(DDE)执行命令
WinHelp
调用Windows的WinHelp函数

3.5 初始化

载入标准的。INI文件设置并容许MRU文件列表特性
SetDialogBkColor
设置对话框和消息框的缺省背景颜色
使应用程序的设置保存在注册表中,而不是。INI文件中
容许用户经过Windows的文件管理器打开数据文件
RegisterShellFileTypes
在Windows的文件管理器中注册全部的应用程序文档类型
使控件具备三维外观(动态库)
Enable3dControlsStatic
使控件具备三维外观(静态库)

3.6 命令操做

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命令
相关文章
相关标签/搜索