第4章mfc基本应用程序的建立内容摘要:

s here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() // 声明消息映射 }。 ... MFC AppWizard 代码中, //{{AFX_VIRTUAL(类名 ) ... //}}AFX_VIRTUAL 是 ClassWizard定义的专门用作虚函数重载的标记,表示该程序块中的虚函数的重载是由 ClassWizard来自动管理的,一般不需要去更改。 同样, //{{AFX_MSG(类名 ) ... //}}AFX_MSG 是 ClassWizard定义的专门用作消息映射声明的标记。 代码中的 “ //TODO:”以及英文等注释是由 MFC AppWizard为用户自动生成的。 若不需要这些注释,可在应用程序向导的第五步对话框中,将 “ Would you like to generate source file ments?”项选为 “ No,thank you”。 下面再来看看该 Ex_SDIHello应用程序的 : include // 预编译处理的头文件 include // 应用类的头文件 include // 主框架类的头文件 include // 文档类的头文件 include // 视图类的头文件 MFC AppWizard //消息映射开始 BEGIN_MESSAGE_MAP(CEx_SDIHelloApp, CWinApp) // 消息映射宏 //{{AFX_MSG_MAP(CEx_SDIHelloApp) // 映射 “ 帮助 ” 菜单项中的 “ 关于 Ex_SDIHello”命令消息,当用户选择了 // 该命令时,将执行函数 OnAppAbout ON_COMMAND(ID_APP_ABOUT, OnAppAbout) // NOTE the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // 映射 “ 文件 ” 菜单项中的 “ 新建 ” 和 “ 打开 ” 命令消息,当用户选择了“ 新建 ” // 或 “ 打开 ” 命令时,将相应执行 CWinApp::OnFileNew或CWinApp::OnFileOpen ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) // 映射 “ 文件 ” 菜单项中的 “ 打印设置 ” 命令消息,当用户选择了 // 该命令时,将执行函数 CWinApp::OnFilePrintSetup ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) END_MESSAGE_MAP() // 消息映射宏 MFC AppWizard // 消息映射开始结束 CEx_SDIHelloApp::CEx_SDIHelloApp() // 构造函数 { } CEx_SDIHelloApp theApp。 // 定义的一个应用类对象,表示一个实例 BOOL CEx_SDIHelloApp::InitInstance() { ... } ... void CEx_SDIHelloApp::OnAppAbout() { CAboutDlg aboutDlg。 // 定义的 CAboutDlg对象 ()。 // 调用相应的库函数,显示 CAboutDlg对话框 } 代码中, //{{AFX_MSG_MAP(类名 ) .. //}}AFX_MSG_MAP 是 ClassWizard定义的专门用作消息映射的标记,表示该程序块中的消息映射函数是由 ClassWizard来自动管理的,用户一般不需要去更改。 MFC AppWizard 最主要的 InitInstance函数体代码: BOOL CEx_SDIHelloApp::InitInstance() { // 若用户在 MFC AppWizard的第三步中,选中了 “ ActiveX Controls”, // 则表示所创建的应用程序支持 ActiveX控件 AfxEnableControlContainer()。 // 若用户在 MFC AppWizard的第四步中,选中了 “ 3D controls” // 则表示所创建的应用程序支持 Windows 95版本前的 3D控件风格 ifdef _AFXDLL Enable3dControls()。 // 使用动态的 3D控件 else Enable3dControlsStatic()。 // 使用静态的 3D控件 endif // 在系统注册表中登记应用程序的主键值,以便将一些与应用程序 // 相关的参数存放在该主键值下 SetRegistryKey(_T(Local MFC AppWizardGenerated Applications))。 // 从注册表中调入应用程序的一些标准参数值 . LoadStdProfileSettings()。 MFC AppWizard // 若用户在 MFC AppWizard的第一步中,选择了 “ Single document”类型, // 则进行下列的单文档模板的创建及其初始化操作。 CSingleDocTemplate* pDocTemplate。 // 定义一个单文档模板指针变量 pDocTemplate = new CSingleDocTemplate(// 登记并创建单文档应用程序模板 IDR_MAINFRAME, // 菜单、快捷键等的资源标识号 RUNTIME_CLASS(CEx_SDIHelloDoc), // 文档类 RUNTIME_CLASS(CMainFrame), // 主框架窗口类 RUNTIME_CLASS(CEx_SDIHelloView))。 // 视图类 AddDocTemplate(pDocTemplate)。 // 向应用程序添加文档模板 // 分列命令行标准命令如 DDE、文件打开等 CCommandLineInfo cmdInfo。 ParseCommandLine(cmdInfo)。 // 传送命令行指定的命令,并执行相应的操作 if (!ProcessShellCommand(cmdInfo)) return FALSE。 // 对主框架窗口进行初始化以便显示和更新 m_pMainWndShowWindow(SW_SHOW)。 m_pMainWndUpdateWindow()。 return TRUE。 } MFC AppWizard  RUNTIME_CLASS是一个运行类的宏定义,返回 CRuntimeClass类指针。 借助 CRuntimeClass类结构能在应用程序运行过程中获得该类对象及其基类的相关信息,从而可以实现运行时类型检查。  CSingleDocTemplate是一个单文档模板类,将用户应用程序项目中的资源、主框架窗口类、文档类以及视图类建立了联系。 AddDocTemplate负责将这些联系嵌入应用程序中。 类似的,还有用于多文档应用程序的多文档模板类CMultiDocTemplate,但与单文档不同的是,多文档模板可以创建多个视、多个文档,  很多程序都需要从命令行输入参数,它是通过 ParseCommandLine函数保存在由 CCommandLineInfo类定义的对象中,命令行最终的命令和参数是通过ProcessShellCommand执行的。 与 DOS命令行操作不同的是, Windows应用程序命令行参数是通过选择 “ 开始 ” “ 运行 ” 菜单命令,在弹出的运行对话框中指定的。 MFC AppWizard  文档类 CEx_SDIHelloDoc CEx_SDIHelloDoc类的 : ... class CEx_SDIHelloDoc : public CDocument { protected: CEx_SDIHelloDoc()。 // 构造函数 DECLARE_DYNCREATE(CEx_SDIHelloDoc) ... public: //{{AFX_VIRTUAL(CEx_SDIHelloDoc) public: virtual BOOL OnNewDocument()。 // 当新建一个文档时,自动调用该函数 virtual void Serialize(CArchiveamp。 ar)。 // 当文档打开或保存时,自动调用该函数 //}}AFX_VIRTUAL // Implementation public: virtual ~CEx_SDIHelloDoc()。 ifdef _DEBUG // 若应用程序是调试版本 virtual void AssertValid() const。 virtual void Dump(CDumpContextamp。 dc) const。 endif ... MFC AppWizard // 产生消息映射函数 protected: //{{AFX_MSG(CEx_SDIHelloDoc) // NOTE the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() }。 ... 用户的文档类 CEx_SDIHelloDoc是从基类 CDocument派生而来。 AssertValid和 Dump是用于调试版本的两个虚函数。 AssertValid的目的是启用 “ 断言 ” 机制来检验对象的正确性、合法性,而 Dump的目的是为他人分析用户自己定义的类提供一种机制,用来输出类的名称或其他数据内容。 MFC AppWizard  视图类 CEx_SDIHelloView CEx_SDIHelloView类的 : class CEx_SDIHelloView : public CView { protected。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。