2023年6月22日发(作者:)
MFC中的⼏个常⽤类——CWinApp1 概述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_hInstancem_hPrevInstancem_lpCmdLinem_nCmdShowm_bHelpModem_pActiveWndm_pszExeNamem_pszHelpFilePathm_pszProfileNamem_pszRegistryKey标识了应⽤程序的当前实例在32位应⽤程序中被设为NULL指向⼀个以null结尾的字符串,指定了应⽤程序的命令⾏指定最初如何显⽰窗⼝指明⽤户是否处于Help上下⽂模式(通常⽤SHIFT+F1激活)当⼀个OLE服务器是现场可激活时,它指向容器应⽤程序的主窗⼝应⽤程序的模块名字应⽤程序的帮助⽂件的路径应⽤程序的。INI⽂件名⽤于确定保存应⽤程序主要设置的完整的注册表键m_pDocManager⽤于保存⽂档模板管理类的指针(MSDN中没有这个数据成员)3.2 构造函数CWinApp 构造⼀个CWinApp对象3.3 操作符载⼊光标资源载⼊WINDOWS.H中IDC_常量所指定的Windows预定义光标LoadOEMCursor载⼊WINDOWS.H中OCR_常量所指定的WindowsOEM预定义光标载⼊图标资源LoadStandardIconLoadOEMIcon载⼊WINDOWS.H中IDI_常量所指定的Windows预定义图标载⼊WINDOWS.H中OIC_常量所指定的WindowsOEM预定义图标检查应⽤程序的命令⾏是否指定/Automation选项。已不⽤。应当在调⽤ParseCommandLine之后使⽤CCommandLineInfo::m_bRunEmbedded中的值检查应⽤程序的命令⾏是否指定/Embedding选项。已不⽤。应当在调⽤ParseCommandLine之后使⽤CCommandLineInfo::m_bRunEmbedded中的值解析命令⾏中的每个参数和标志处理命令⾏参数和标志从应⽤程序的。INI⽂件的⼀个⼊⼝中获取⼀个整数WriteProfileInt将⼀个整数写到应⽤程序的。INI⽂件的⼊⼝从应⽤程序的。INI⽂件的⼀个⼊⼝中获取⼀个字符串将⼀个字符串写到应⽤程序的。INI⽂件的⼊⼝将⼀个⽂档模板加到应⽤程序的可⽤⽂档模板列表中GetFirstDocTemplatePositionGetNextDocTemplate获取第⼀个⽂档模板的位置获得⽂档模板的位置。可以递归调⽤由框架调⽤,⽤以从⽂件打开⼀个⽂档将⼀个⽂件名加⼊最近使⽤(MRU)的⽂件列表SelectPrinter选择先前由⽤户在打印对话框中指定的打印机RunEmbeddedParseCommandLineProcessShellCommand创建⼀个打印机设备环境GetPrinterDeviceDefaults获得缺省的打印机设备3.4 可重载的函数可被重载以执⾏Windows的实例初始化,⽐如创建窗⼝对象InitApplication初始化.运⾏缺省的消息循环。可被重载以定制消息循环OnIdle可被重载以执⾏应⽤程序指定的空闲时处理可被重载以在应⽤程序结束时执⾏清除操作在关闭所有的⽂档之前隐藏应⽤程序关闭所有打开的⽂档关闭所有打开的⽂档在消息被分派到Windows函数::TranslateMessage和::DispatchMessage之前过滤消息SaveAllModified提⽰⽤户保存所有改变了的⽂档为应⽤程序实现在消息到达应⽤程序之前截取特定的消息ProcessWndProcException截取应⽤程序的消息和命令处理函数抛出的未被处理的异常打开或关闭等待光标OnDDECommandWinHelp框架调⽤这个函数以响应动态数据交换(DDE)执⾏命令调⽤Windows的WinHelp函数3.5 初始化载⼊标准的。INI⽂件设置并允许MRU⽂件列表特性SetDialogBkColor设置对话框和消息框的缺省背景颜⾊使应⽤程序的设置保存在注册表中,⽽不是。INI⽂件中允许⽤户通过Windows的⽂件管理器打开数据⽂件RegisterShellFileTypes在Windows的⽂件管理器中注册所有的应⽤程序⽂档类型使控件具有三维外观(动态库)Enable3dControlsStatic使控件具有三维外观(静态库)3.6 命令操作OnFileNewOnFileOpenOnFilePrintSetupOnContextHelpOnHelpOnHelpIndexOnHelpFinderOnHelpUsing实现ID_FILE_NEW命令实现ID_FILE_NEW命令实现ID_FILE_PRINT_SETUP命令处理应⽤程序内的SHIFT+F1命令处理应⽤程序内的F1帮助命令(使⽤当前的上下⽂)处理ID_HELP_INDEX命令,提供缺省的帮助主题处理ID_HELP_FINDER和ID_DEFAULT_HELP命令处理ID_HELP_USING命令
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687428484a9318.html
评论列表(0条)