Visual C++第03章 MFC基本应用程序的建立.doc_第1页
Visual C++第03章 MFC基本应用程序的建立.doc_第2页
Visual C++第03章 MFC基本应用程序的建立.doc_第3页
Visual C++第03章 MFC基本应用程序的建立.doc_第4页
Visual C++第03章 MFC基本应用程序的建立.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 MFC基本应用程序的建立 C+面向对象程序设计语言是在C语言的基础上发展起来的,它与传统的程序设计方式不同,而是一种新的程序设计范型。它对降低软件的复杂性,改善其重要性和维护性、提高软件的生产效率,有着十分重要的意义。因此面向对象程序设计被普遍认为是程序设计方法的一场实质性的革命 Visual C+是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C+可视化开发环境,它使C+语言在Windows平台上得到了有效的可视化的应用。C+编程都是在控制台方式下运行的,这样可以在不需要太多涉及Visual C+的细节而专心于C+程序设计的本身。但是,当C+及程序设计基本掌握后,我们就不能仅停留在控制台方式下运行,因为学习C+的目的在于应用,从本章开始,将着重讨论如何用Visual C+的强大功能开发Windows应用程序。我们将看到,展现在你面前的是彩色亮丽的图形图像及千变万化的可移动的文字、影像界面。像市场流行的游戏软件、企事业管理、图形图像处理、银行、电信、教育及各大小网站的软件编程和网页设计等。本章一、二节是Windows编程和MFC编程,不是我们重点掌握的,大家可以自己看看,也是有帮助的。我们从第三节(150页):使用MFC AppWizard(应用程序向导)开始讲。前面一、二节中需要大家掌握的是:1、Windows应用程序上机编程操作步骤(C+上机编程操作步骤,教材140页)2、理解Windows编程特点中的:消息驱动机制概念、图形设备接口概念、基于资源的程序设计概念、动态连接库概念、进程和线程的概念、阅读147页MFC应用程序并理解其代码(146149页)(做为讨论题留给大家)实际上,在Visual C+6.0中,我们不需要加入更多的Windows程序代码,就能创建所需要的应用程序,这就是我们要着重掌握的MFC AppWizard(应用程序向导),它能为用户快速、高效、自动地生成一些常用的标准程序结构和编程风格,它们被称为应用程序框架类型(MFC AppWizard提供的各应用程序框架类型150页说明)其中:MFC AppWizard(exe)是我们常用的(一般MFC的Windows应用程序),它包含用户最常用、最基本的3种应用程序类型:单文档、多文档和基于对话框的应用程序。所谓单文档应用程序:它的功能比较简单,复杂程度适中,虽然每次只能打开和处理一个文档,但已能满足一般工程上的需要。基于对话框的程序:对比单文档更简单,也是最紧凑的。它没有菜单、工具栏及状态栏,也不能处理文档,但它的好处是速度快,代码少,程序员所花费的开发和调试的时间短。多文档应用程序:能允许同时打开和处理多个文档。与单文档应用程序相比,增加了许多功能,需要大量额外的编程工作。例如它不仅需要跟踪所有打开文档的路径,而且还需要管理各文档窗口的显示和更新等。总之,无论你选择何种类型的应用程序框架,一定要根据用户自己的具体需要而定。 一、建一个单文档的MFC Windows应用程序,屏幕上出现一个空窗口。(注意:以后我们所建的应用程序一般都是此应用程序类型)1、在E盘建一个文件夹,名为:vcpp(存放你建的文件)2、双击桌面上的Microsoft Visual C+系统: -File - New -Projects -MFC AppWizard(exe) 见150页表3.3-输入路径名vcpp(事先建好的文件夹) -输入文件名为:“显示窗口“ -OK3、选SDI(单文档)-一直缺省 最后便建立了一个名为:”显示窗口”的单文档应用程序-运行! 便出现一个空窗口。注意:见151-153页的制作过程(缺省各界面的情况)。我们没作任何保存,它自动存在你的文件夹vcpp里,要删除它,找到你的vcpp文件夹里的这个文件就可以删除,以后你的VC+程序文件都要建在这里,千万不要乱建,乱存。建好的单文档应用程序里面包括4个类(文件):主框架程序(类)(MainFrm.cpp)、应用程序(类)(程序名.cpp)、视图程序(类)(程序名Wiew.cpp)、文档程序(类)(程序名Doc.cpp)。(见下页有解释) 图3.1 MFC AppWizard的“新建”对话框MFC AppWizard创建的应用程序框架类型(参见上面图3.1): ATL COM MFC AppWizard 创建ATL(Active Template Library)应用模块工程Cluster Resource TypeWizard创建Cluster Resource(用于Windows NT服务器)Custom MFC AppWizard 创建自己的应用程序向导Database Project 创建数据库应用程序DevStudio Add-in Wizard 创建ActiveX组件或VBScrip宏Extended Store Proc Wizard 创建基于SQL服务器下的外部存储过程ISAPI Extension Wizard 创建Internet Server程序MakeFile 创建独立于Visual C+开发环境的应用程序MFC ActiveX ControlWizard 创建ActiveX Control应用程序MFC AppWizard(dll) MFC的动态连接库MFC AppWizard(exe) 一般MFC的Windows应用程序Utility Project 创建简单、实用的应用程序Win32 Application 其它Win32的Windows应用程序Win32 Console Application Win32的控制台应用程序Win32 Dynamic-Link Library Win32的动态连接库Win32 Static Library Win32的静态连接库显示窗口程序的运行结果(见书153页图3.12):二、建一个一般MFC的Windows应用程序,屏幕上出现2行字。1、双击桌面上的Microsoft Visual C+系统: -File - New -Projects -MFC AppWizard(exe) -输入路径名vcpp(事先建好的文件夹) -输入文件名为:显示2行字 -OK选SDI-一直缺省Finish。2、在View.cpp(视图类)中找到OnDraw(CDC *pDC)函数,写:CString str1=“ 学好Visual C+走遍天下”;CString str2=“ 改革开放的28年颂歌!南山学院好!”;pDC-TextOut(0,0,str1);pDC-TextOut(0,20,str2); (添写代码情况,见下图3.2)运行后窗口显示如上添加的2行字,如果显示带颜色的图形、文字等,以后会逐步学到。l OnDraw(CDC *pDC)函数是视图类中的显示函数l CDC是设备环境类(在Visual C+5轻松进阶书56页中,有好多它的对象方法),对象方法也叫函数,*pDC是CDC的指针对象l CString是处理字符的类。l TextOut(x,y,str)是CDC类的显示函数(函数也叫对象方法),参数x,y是字符串在窗口中的显示位置(x y坐标),str是已定义和赋好值的字符串。图3.2 Visual C+开发环境界面1、标题栏 2、菜单栏 3、工具栏 4、项目工作区窗口5、输出窗口 6、输出窗口标签 7、状态栏 8、文档窗口三、理解程序框架本部分是留给大家的课后学习、讨论题,一定通过上机,真正理解MFC程序的4个主要的类:应用程序类、文档类、视图类、主框架类。(这里只介绍应用程序类) 打开项目工作区里的ClassView或FileView可以看到MFC为我们自动创建了以下几个主要的类:1、 文件名App.h (cpp)应用程序类CMyApp的基类是CWinApp,而CWinApp的基类又是CWinThread,CWinThread类是用来完成对线程(见后面的名词解释)的控制,包括对线程的创建、运行、终止和挂起等。它实际上是Windows首先运行的内容,当这个程序开始时,它将会把主窗口放在屏幕上。C或C+是从main()主函数开始执行,而VC+是从WinMain()函数开始执行,且WinMain()函数就是隐含在此应用程序中。下面是显示2行字应用程序的头文件和执行文件/ 显示2行字.h : main header file for the 显示2行字 application#if !defined(AFX_2_H_6CF87E54_5FC3_419D_B373_44264BFF449C_INCLUDED_)#define AFX_2_H_6CF87E54_5FC3_419D_B373_44264BFF449C_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#include resource.h / main symbols/ CMy2App:/ See 显示2行字.cpp for the implementation of this class/class CMy2App : public CWinApp 我们用户的应用程序类CMy2App是从MFC基类 CWinApp派生来的public:CMy2App(); 应用程序本身的声明/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CMy2App)/ 是ClassWizard定义的专门用做虚函数重载的标记public: / 表示该程序块中的虚函数的重载是由ClassWizardvirtual BOOL InitInstance(); / 自动管理的,用户一般不需要去更改/AFX_VIRTUAL / Implementation/AFX_MSG(CMy2App) / 是ClassWizard定义的专门用做消息映射声明的afx_msg void OnAppAbout(); /该函数就是消息映射函数,映射”帮助”选单项中的”关于/显示2行字”命令消息,当用户选择了该命令时,将执行该/函数OnAppAbout/ 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();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_2_H_6CF87E54_5FC3_419D_B373_44264BFF449C_INCLUDED_)/其中的一些注释是由MFC AppWizard为用户自动生成的,如果不需要这些/注释,可在应用程序向导的第五步对话框中,将“Would you like to generate/source file comments?”项选为“No,thank you“。/ 显示2行字.cpp : Defines the class behaviors for the application./#include stdafx.h /预编译处理的头文件#include 显示2行字.h /应用程序类的头文件#include MainFrm.h /主框架类的头文件#include 显示2行字Doc.h /文档类的头文件#include 显示2行字View.h /视图类的头文件#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMy2AppBEGIN_MESSAGE_MAP(CMy2App, CWinApp)/消息映射入口(开始)/AFX_MSG_MAP(CMy2App) /消息映射宏存放区ON_COMMAND(ID_APP_ABOUT, OnAppAbout)/映射”帮助”选单项中的”关于显示2行/字”命令消息,当用户选择了该命令时,将执行函数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 / Standard file based document commands /映射命令区ON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew)/映射”文件”选单项中的”新建”/当用户选择了”新建”时,将相应执行CWinApp:OnFileNewON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen)/映射”文件”选单项中的”打开”/当用户选择了”打开”时,将相应执行CWinApp:OnFileOpen/ Standard print setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup) /该宏是具体实/现所需要的消息映射。它有两个参数:第一个ID_FILE_PRINT,这是一个ID。第二个参数/CView:OnFilePrint,这是为ID添加的消息处理函数名称。这样,通过ON_COMMAND宏/就将菜单与相应的消息处理函数进行了连接,也就完成了该ID的消息映射。END_MESSAGE_MAP() /消息映射宏存放区结束/ CMy2App constructionCMy2App:CMy2App() /构造函数,变量赋初值一般都在这里/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CMy2App objectCMy2App theApp;/定义的一个应用类对象,表示一个实例/ CMy2App initializationBOOL CMy2App:InitInstance()AfxEnableControlContainer();/若用户在MFC AppWizard的第三步中,选中了/“ActiveX Controls”则表示所创建的应用程序支持ActiveX控件/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need./若用户在MFC AppWizard的第四步中,选中了”3D controls”,则表示所创建的应用程序支持/Windows95版本前的3D控件风格。(对下面2条)#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL使用动态的3D控件#elseEnable3dControlsStatic();/ Call this when linking to MFC statically使用静态的3D控件#endif/ Change the registry key under which our settings are stored./ TODO: You should modify this string to be something appropriate/ such as the name of your company or organization.SetRegistryKey(_T(Local AppWizard-Generated Applications);/在Windows系统注册表/中登记应用程序的主键值,以便将一些与应用程序相关的参数存放在该主键值下LoadStdProfileSettings(); / Load standard INI file options (including MRU)/从注册表中/调入应用程序的一些标准参数,其中包括最近文件列表的文件名/ Register the applications document templates. Document templates/ serve as the connection between documents, frame windows and views./ 以下:若用户在MFC AppWizard的第一步中,选择了“Single document(单文档)”类型,/则进行下列的单文档模板的创建及其初始化操作。CSingleDocTemplate* pDocTemplate;/定义一个单文档模板指针变量pDocTemplate = new CSingleDocTemplate/登记并创建单文档应用程序模板(IDR_MAINFRAME,/菜单,快捷键等的资源标识号RUNTIME_CLASS(CMy2Doc),/文档类RUNTIME_CLASS(CMainFrame), / main SDI frame window主框架窗口类RUNTIME_CLASS(CMy2View);/视图类AddDocTemplate(pDocTemplate);/向应用程序添加文档模板/ Parse command line for standard shell commands, DDE, file open/分列命令行标准命令如DDE,文件打开等。CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);/ Dispatch commands specified on the command line/传送命令行指定的命令,并执行相应的操作if (!ProcessShellCommand(cmdInfo)return FALSE;/ The one and only window has been initialized, so show and update it./对主框架窗口进行初始化以便显示和更新m_pMainWnd-ShowWindow(SW_SHOW);m_pMainWnd-UpdateWindow();return TRUE;/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog/基类CDialog(对话框类)派生出的CAboutDlg类 /该函数与前面几个类不同的是,该类增加AFX_DATA机制, /称为数据映射机制,这个机制是用来实现DDX(数据交换) / DDV(数据校验),它能使应用程序与用户交互功能的实现 /变得更为容易和直接。public:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/枚举类型IDD_ABOUTBOX的映射宏/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support数据交换/校验/AFX_VIRTUAL /虚函数/ Implementationprotected:/AFX_MSG(CAboutDlg)/ No message handlers/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/数据交换函数/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/是ClassWizard定义的专门用做消息映射的标记,/ No message handlers /表示该程序块中的消息映射函数是由/AFX_MSG_MAP /ClassWizard来自动管理的,用户一般不需要更改END_MESSAGE_MAP()/ App command to run the dialogvoid CMy2App:OnAppAbout()/执行缺省对话框函数CAboutDlg aboutDlg; /定义的CAboutDlg对象aboutDlg.DoModal(); /调用相应的库函数,显示CAboutDlg对话框/ CMy2App message handlers2、 CMainFrm.h (cpp)主框架类CMainFrm的基类是CFrameWnd,该类是显示主窗口,是我们找到菜单栏、窗口的标题栏以及工具栏的地方,主窗口对象负责窗口中出现的、围绕操作领域的一切,如:图画、文本和其它图形,这个区域称为窗口中的客户区。它用于管理应用程序窗口显示如:标题栏、菜单栏、工具栏、状态栏、控制菜单、控制按钮等,它是所有MDI(多文档)和SDI(单文档)子窗口的包容器。3、 文件名View.h (cpp)视图类 CMyView的基类是CView,处理客户区,是我们在程序中设置数据格式及显示数据的位置,如我们在创建一个字处理程序时正在编辑的文本,事实上,视图对象是出现在客户区顶部的窗口本身,用于让用户通过窗口来访问文档、视图类。4、 CMyDoc.h (cpp)文档类 CMyDoc.h (cpp)的基类是CDocument,为程序存储数据,将所有数据存在文档中,而在视图对象中处理并显示。它包含了应用程序在运行期间所用到的数据文档。5、 工作区里出现的其它有关文件(见画线程序)a) Resource.h是标准的头文件,包含所有资源符号的定义。b) Stdafx.h用于建立预编译头文件(文件名.pch)和一个预定义的类型文件stdafx.obj,由于MFC体系结构非常大,如果每次都编译的话很费事,因此,把常用的MFC头文件都放在stdafx.h中,如afxwin.h、afxext.h、afxdisp.h等,然后让stdafx.cpp包含stdafx.h文件。这样由于编译器可以识别哪些文件已经编译过,所以stdafx.cpp就只编译一次。因为它存放的是头文件编译后的信息,故称做预编译头文件。如果以后我们在编程时不想让有些MFC头文件每次都被编译,也可以将它加入到stdafx.h中,采用预编译头文件,可以加速编译过程。c) 文件名.clw为ClassWizard数据库文件,存放由ClassWizard使用的信息,Wizard还使用这个文件来存储信息,以便创建和编辑消息映射、对话框数据映射、以及创建成员函数的原型。d) 文件名.rc是包含资源描述信息的资源文件,资源文件列有应用程序用到的所有资源,包括存储在”res”子文件夹中的位图、图标和光标,这个文件可以在VC+6.0中直接编辑。e) 文件名.rc2包含不是由Visual C+6.0编辑的资源,可以将所有不能由资源编辑器编辑的资源放置到这个文件中。f) 文件名Doc.ico是包含MDI子窗口图标的图标文件,这个图标包含在资源文件的 文件名.rc中。g) 文件名.ioc是包含应用程序图标的图标文件,应用程序图标包含在资源文件的 文件名.rc中。h) Toolbar.bmp用于创建工具栏按钮的位图文件,初始工具栏和状态栏,是在主边框窗口类中构造。6、在填写代码时,经常遇到的一些数据类型(见书145页)BOOL bool 布尔值BSTR unsigned short 32位字符指针BYTE unsigned char 8位无符号整数COLORREF unsigned long 用做颜色的32位值DWORD unsigned long 32位无符号整数,段地址和相关的偏移地址LONG long 32位带符号整数LPARAM long 作为参数传递给窗口过程或回调函数的32位值LPCSTR const char* 指向字符串常量的32位指针。LPSTR char* 指向字符串的32位指针LPVOID void 指向未定义类型的32位指针LRESULT long 来自窗口过程或回调函数的32位返回值UINT unsigned long 32位无符号整数WORD unsigned short 16位无符号整数WPARM ynsigned int 当做参数传递给窗口过程或回调函数的32位值附:一个简单的Windows应用程序(1)FileNewProjectsWin32 Application(2)Project Name写入项目名“简单程序”在Location下的编辑框中直接键入文件夹名称,或单击Browse按钮()选择一个已有的文件夹(3)单击OKAn empty projectFinishOK(4)再次选择FileNew单击FileC+Source File在右边的File框中键入 简单程序.cpp单击OK敲入下面的代码。(编译运行程序,点“!“)#include int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) MessageBox(NULL,”学好Visual C+”,”走遍天下”,0);/应用程序接口函数,用来弹出一个对话框,显示短消息/第一个参数指定父窗口句柄/第二个参数显示消息内容/第三个参数显示对话框窗口的标题/指定在对话框中显示的按钮 return 0; 说明:(1)每一个用CC+编写的Windows应用程序都需要windows.h头文件,它还包含了其他的一些Windows头文件,这些头文件定义了Windows的所有数据类型、函数调用、数据结构和符号常量。(2)主函数参数int WINAPI WinMain( HINSTANCE hInstance, /当前应用程序的实例句柄 /句柄 对象HINSTANCE hPrevInstance, /前一应用程序的实例句柄 /句柄 对象 LPSTR lpCmdLine, /指向命令行参数的指针 /数据类型 int nCmdShow) /窗口的显示状态 /数据类型(3)WINAPI是Windows应用程序设计接口(Application Programming Interface)的缩写。API是一个程序内(或一组相关程序内)的一组函数调用,为开发者创建其他程序提供了很大方便。在使用这些函数时不必知道函数内部的细节,只需知道函数原形及返回值。利用Windows所提供的这些API,程序员可以比较方便地开发基于 Windows操作系统的应用程序,适用的Windows操作系统包括Windows XP,Windows 2000,Windows NT等。7、Windows常用的句柄类型(146页)句柄(handle):是一个标识Windows资源(如选单、图标、窗口等)和设备等对象的变量,或者是一个对操作系统资源的间接引用。HBITMAP 保存位图信息的内存域的句柄HBRUSH 画刷句柄HCTL 子窗口控件的句柄HCURSOR 鼠标光标的句柄HDC 设备环境描述表的句柄HDLG 对话框的句柄HFONT 字体的句柄HICON 图标句柄HINSTANCE 应用程序的实例句柄HMEM 内存块的句柄HMENU 菜单句柄HMODUL 模式的句柄,常用来从可执行文件中获取资源数据HPALETTE 颜色调色板句柄HPEN 在设备上画图时画笔的句柄HRGN 在窗口上剪贴一块区域的句柄HTASK 独立于已执行的任务的句柄HWND 窗口句柄HANDLE 通用句柄,如:HINSTANCE hInstance 可以改写为: HANDLE hInstance应用程序的实例句柄句柄是Windows用来标识应用程序建立或使用对象的唯一整数,Windows使用各种各样的句柄标识的对象有:(1)模块hmodul (2)任务htask (3)应用程序实例句柄hinstance (4)文件hfile (5)内存块block of memory(6)菜单hmenu (7)控件hcontrol (8)字体hont(9)资源resource:包括图标hicon、光标hcursor、字符串hstring等(10)GDI对象包括位图hbitmap、画刷hbrush、元文件hmetafile、调色板hpalette、画笔hpen、区域hregion以及设备环境描述表device context等。例如:HMENU hmenu;定义菜单句柄的对象。而hbrush就是画刷句柄HBRUSH的对象。 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态链接模块,相反,WindowsAPI给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来操作它们。因此,句柄是一个标识符,用来标识各种对象。 进程是装入内存中正在执行的应用程序,包括私有的虚拟地址空间、代码、数据及其它操作系统资源,如:文件管道、同步对象等,它包括多个线程。l 线程是操作系统分配CPU时间的基本实体,可以执行应用程序代码的任何部分,同一进程的所有线程共享同样的虚拟地址空间、全局变量和操作系统资源。8、 几个常见的类1)CView(是CCmdTarget的子类)用于让用户通过窗口来访问文档(显示文档数据的应用程序专用视图的基类)。其子类:(1)CScrollView:具有滚动功能的视图的基类 (2)CFormView:其布局在对话资源中定义的滚动视图。 (3)CEditView:具有文本编辑、查找、替换和滚动功能的视图2)CWnd(是CCmdTarget的子类)通用窗口类,用来提供Windows中所有通用特性,对话框和控件。3) CFrameWnd(是CWnd的子类),SDI应用程序主框架窗口的基类4) CDialog对话框类,建立模式无模式对话框模型,是子层次结构的根类 CFileDialog:提供打开或保存一个文件的标准对话框 CColorDialog:提供选择一种颜色的标准对话框 CFontDialog: 提供选择一种字体的标准对话框 CPrinDialog:提供打印一个文件的标准对话框 CFindReplaceDialog:提供删除查找并替换的标准对话框5) CMDIFrameWnd多文档应用程序主框架窗口显示管理。6) CMDICHildWnd多文档应用程序子窗口显示和管理。7) CDocument应用程序专用文档的基类。8) CMenu菜单类9)窗口应用程序类:CWinApp类:每个程序有且只有一个应用程序对象,在运行程序中该对象与其他对象相互协调。该类封装了初始化、运行、终止应用程序代码。10)文档/视图类:文档对象由文档模板对象创建,它管理应用程序的数据。视图对象表示一个窗口的用户区,显示文档数据并允许用户与之交互。文档/视图类包括以下子类或模板。CDocTemplate:文档模板的基类,文档模板来协调文档、视图和框架窗口的创建。CSingleDocTemplate:单文档界面(SDI)的文档模板。CMultiDocTemplate:多文档界面(MDI)的文档模板CDocument:应用程序专用文档的基类。11)菜单类:CMenu类,该类是CObject类的子类,用于管理菜单。它是一个Windows HMenu的封装,提供了与窗口有关的菜单资源建立、修改、跟踪及删除功能的成员函数。12)对话框类:CAboutDlg是每一个应用程序框架都有的,用于显示本程序的有关信息。它是从CDialog类派生的。13)CObject类是MFC提供的绝大多数类的基类。该类完成动态空间的分配与回收,支持一般的诊断、出错信息处理和文档序列化。14)CCmdTarget类主要负责将系统事件(消息)和窗口事件(消息)发送给响应这些事件的对象,完成消息发送、等待和派遣(调度)等工作,实现应用程序的对象之间协调运行。需要说明的是,对于基于对话框的应用程序来说,一般有CAboutDlg类、应用程序类和对话框类。9、几种常见的消息映射宏ON_COMMAND 指出由哪个函数处理指定的命令消息ON_CONTROL 指出由哪个函数处理指定的控制消息ON_MESSAGE 指出由哪个函数处理指定的用户自定义消息ON_REGISTERED_MESSAGE指出由哪个函数处理指定的已登记用户定义消息ON_UPDATE_COMMAND_UI指由哪个函数处理指定的用户接口更新命令消息在CMyView.h中有DECLARE_MESSAGE_MAP()宏,它的作用是用来声明在该类中将使用消息映射来向函数映射消息。上面在“显示2行字”程序.cpp中,有下列宏:在视图类的实现文件CMyView.cpp中,有BEGIN_MESSAGE_MAP()宏,该宏的作用是在该类中开始消息映射。接着下面的ON_COMMAND(ID_FILE_PRINT,CVioew:OnFilePrint)宏,该宏是具体实现所需要的消息映射。它有两个参数:第一个ID_FILE_PRINT,这是一个ID。第二个参数CView:OnFilePrint,这是为ID添加的消息处理函数名称。这样,通过ON_COMMAND宏就将菜单与相应的消息处理函数进行了连接,也就完成了该ID的消息映射。而END_MESSAGE_MAP()宏是结束消息映射。注意:ON_COMMAND宏只用来处理由菜单、工具栏和加速键产生的消息,其他的消息处理可能由别的宏来处理,祥见上面列出的那些宏。四、使用ClassWizardClassWizard称为类向导,能为一个项目添加一个类,进行消息和数据映射,创建OLE Automation(自动化)属性和方法以及进行ActiveX事件处理等。ViewClassWizard便出现书156页图3.15所示的对话框:1、 Message Maps(消息映射):用来添加、删除和编辑处理消息的成员函数2、 Message Variables(成员变量):添加或删除与控件相关的成员变量(或称数据成员),以便与控件进行数据交换。3、 Automation(自动化):为支持Automation的类(如ActiveX控件类)添加属性和方法4、 Active Events(ActiveX事件):为ActiveX控件类添加触发事件的支持5、 Class Info(类信息):有关项目中类的其他信息五、消息和消息映射(1)窗口消息:主要是指WM_开头的消息(WM_COMMAND除外)一般由窗口类和视图类对象来处理,窗口消息往往带有参数,以标志处理消息的方法。1)鼠标消息(见下图3.3所示)WM_MOUSEMOVE鼠标移动时发送该消息WM_LBUTTONDOWN鼠标左键被按下时发送该消息WM_LBUTTONUP鼠标左键被释放时发送该消息WM_LBUTTONDBLCLK鼠标左键被双击时发送该消息WM_RBUTTONDOWN鼠标右键被按下时发送该消息WM_RBUTTONUP鼠标右键被释放时发送该消息WM_RBUTTONDBLCLK鼠标右键被双击时发送该消息2)键盘消息WM_CHAR 将一次单击键翻译成一个非系统字符时,发送该消息WM_KEYDOWN按下一个非系统键盘时,发送该消息WM_KEYUP释放一个非系统键时,发送该消息 图3.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论