【MFC】CWinApp类详解

00. 目录

01. 概述

CWinApp是一个基类,你通过它来继承Windows应用程序对象。应用程序对象为你提供了初始化应用程序(以及它的每一个实例)和运行应用程序所需的成员函数。

每个使用微软基础类库的应用程序都只能包含一个从CWinApp继承的对象。当Windows调用WinMain函数时,这个对象在其它C++全局对象都已经生成并且可用之后才被创建,WinMain函数是由微软基础类库提供的。将你的CWinApp对象定义为全局的。

当你从CWinApp继承应用程序类的时候,应重载InitInstance成员函数以创建应用程序的主窗口对象。

除了CWinApp的成员函数以外,微软基础类库还提供了以下全局函数,用于访问你的CWinApp对象以及其它全局信息:
· AfxGetInstanceHandle 获得当前应用程序实例的句柄。  
· AfxGetResourceHandle 获得应用程序资源的句柄。  
· AfxGetAppName 获得一个字符串指针,其中包含了应用程序的名字。  
另外,如果你拥有一个指向CWinApp对象的指针,可以通过m_pszExename来获得应用程序的名字。

有关CWinApp类的更多信息参见“Visual C++ 程序员指南”中的“CWinApp:应用程序类”,其中包括下面的内容:
· AppWizard生成的CWinApp派生代码  
· CWinApp在你的应用程序执行顺序中作用  
· CWinApp的缺省成员函数实现  
· CWinApp的主要可重载函数  

#include <afxwin.h>

继承关系

CObject 
 └CCmdTarget 
    └CWinThread 
       └CWinApp 

02. 数据成员

数据成员
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 用于确定保存应用程序主要设置的完整的注册表键  

03. 成员方法

构造函数
CWinApp 构造一个CWinApp对象  

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

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

初始化函数
LoadStdProfileSettings 载入标准的.INT文件设置并允许MRU文件列表特性  
SetDialogBkColor 设置对话框和消息框的缺省背景颜色  
SetRegistryKey 使应用程序的设置保存在注册表中,而不是.INI文件中  
EnableShellOpen 允许用户通过Windows的文件管理器打开数据文件  
RegisterShellFileTypes 在Windows的文件管理器中注册所有的应用程序文档类型  
Enable3dControls 使控件具有三维外观  
Enable3dControlsStatic 使控件具有三维外观  

04. 命令处理

命令处理
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命令  

05. 附录

5.1 官方参考文档

网址:https://docs.microsoft.com/en-us/cpp/mfc/reference/cwinapp-class?view=msvc-160

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CRuntimeClass结构 在CRuntimeClass结构中定义了名、对象所占存储空间的大小、的版本号等成员变量及动态创建对象、派生关系判断等成员函数。每一个从CObject派生的都有一个CRuntimeClass结构同它关联,以便完成在运行时得到对象的信息或基的信息。 要使用CRuntimeClass结构,必须结合使用RUNTIME_CLASS()宏和其他有关运行时型识别的MFC宏。 CCmdTarget (1)消息发送 MFC应用程序为每个CCmdTarget派生创建一个称为消息映射表的静态数据结构,可将消息映射到对象所对应的消息处理函数上。 (2)设置光标 BeginWaitCursor() 将光标改为沙漏形状; EndWaitCursor() 将光标改回到之前的形状; RestoreWaitCursor()用于将光标还原为等待状态。 (3)支持自动化 CCmdTarget支持程序通过COM接口进行交互操作,自动翻译COM接口的方法。 CWinThread 由CCmdTarget派生,主要工作是创建和处理消息循环。 CWinApp 从CWinThread派生,成员函数InitApplication()、InitInstance()、Run()。 在InitInstance()函数中,创建了一个单文档模板或多文档模板(CDocTemplate)的对象,并且在文档模板的构造函数中,系统定义的宏RUNTIME_CLASS创建了文档对象,框架窗口对象和视图对象. 在MFC应用程序中有且仅有一个CWinApp派生的对象,代表程序运行的主线程,代表应用程序本身。 CWnd 由CCmdTarget直接派生,是MFC中最基本的GUI对象。公共变量m_hWnd用于存放供API函数调用的窗口句柄。
很经典的MFC教程。 目 录 译者序 前言 第一部分 基础知识 第1章 窗口 2 1.1 窗口和API环境 2 1.1.1 三种型窗口 2 1.1.2 客户区和非客户区 3 1.2 窗口和MFC环境 4 1.3 怎样应用MFC创建一个窗口 5 1.4 怎样使用MFC销毁一个窗口 9 1.4.1 捆绑到一个已有的窗口 9 1.4.2 窗口 10 1.4.3 窗口进程 10 1.5 怎样使用MFC创建一个窗口 11 1.5.1 使用AfxRegisterWndClass () 函数注册一个窗口 11 1.5.2 使用AfxRegisterClass ()函数 创建一个窗口 12 1.6 怎样销毁一个MFC窗口 14 1.7 厂商安装的窗口 14 1.8 其他型窗口 15 1.9 桌面窗口 16 1.10 小结 16 第2章 18 2.1 基 18 2.1.1 CObject 18 2.1.2 CCmdTarget 19 2.1.3 CWnd 19 2.2 应用程序、框架、文档和视图 19 2.2.1 CWinApp(O/C/W) 20 2.2.2 CView (O/C/W) 21 2.3 其他用户界面 22 2.3.1 通用控件 23 2.3.2 菜单 23 2.3.3 对话框 24 2.3.4 控制条 24 2.3.5 属性 25 2.4 绘图 25 2.4.1 设备环境 25 2.4.2 图形对象 25 2.5 文件 26 2.6 数据库 26 2.6.1 ODBC 26 2.6.2 DAO 27 2.7 数据集 27 2.8 其他数据 27 2.9 通信 28 2.10 其他 29 2.11 小结 31 第3章 消息处理 32 3.1 发送或寄送一个消息 32 3.1.1 发送一个消息 32 3.1.2 寄送一个消息 32 3.1.3 发送一个消息与寄送一个消息 的比较 32 3.2 怎样使用MFC发送一个消息 33 3.3 怎样用MFC寄送一个消息 33 3.4 三种型的消息 34 3.4.1 窗口消息 34 3.4.2 命令消息 34 3.4.3 控件通知 34 3.5 MFC怎样接收一个寄送的消息 36 3.6 MFC怎样处理一个接收到的消息 36 3.7 处理用户界面的对象 44 3.8 创建自定义窗口消息 45 3.8.1 静态分配的窗口消息 45 3.8.2 动态分配的窗口消息 46 3.9 重定向消息 47 3.9.1 子分和超分 47 3.9.2 用MFC子分窗口 48 3.9.3 重载OnCmdMsg ( ) 49 3.9.4 使用SetWindowsHookEx ( ) 49 3.9.5 使用SetCapture ( ) 49 3.9.6 专有的消息泵 50 3.10 小结 50 第4章 绘图 51 4.1 设备环境 51 4.2 在MFC环境中创建一个设备环境 52 4.2.1 屏幕 52 4.2.2 打印机 53 4.2.3 内存 54 4.2.4 信息 54 4.3 绘图例程 55 4.3.1 画点 55 4.3.2 画线 55 4.3.3 画形状 55 4.3.4 形状填充和翻转 55 4.3.5 滚动 56 4.3.6 绘制文本 56 4.3.7 绘制位图和图标 56 4.4 绘图属性 56 4.4.1 设备环境属性 57 4.4.2 画线属性 58 4.4.3 形状填充属性 58 4.4.4 文本绘制属性 58 4.4.5 映像模式 59 4.4.6 调色板属性 62 4.4.7 混合属性 62 4.4.8 剪裁属性 63 4.4.9 位图绘制属性 64 4.5 元文件和路径 65 4.5.1 元文件 65 4.5.2 路径 66 4.6 颜色和调色板 66 4.6.1 抖动色 67 4.6.2 未经抖动色 67 4.6.3 系统调色板 67 4.6.4 使用系统调色板 68 4.6.5 动画色 71 4.7 控制什么时候在哪里绘图 71 4.7.1 处理WM_PAINT 71 4.7.2 只绘制被无效化的区域 72 4.7.3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值