欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    【教学课件】第二章MFC编程和操作.ppt

    • 资源ID:5661754       资源大小:803KB        全文页数:54页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【教学课件】第二章MFC编程和操作.ppt

    第二章MFC编程和操作,2.1Windows编程,2.2MFC编程,2.3MFC程序应用,2.4消息和消息映射,2.5Visual C+常用操作,2.1Windows编程,2.1.1C+的Windows编程 早期的Windows应用程序开发是使用C/C+通过调用Windows API所提供的结构和函数来进行的。对于有些特殊的功能,有时还要借助相应的软件开发工具(Software Development Kit,简称SDK)来实现。这种编程方式由于其运行效率高,因而至今在某些特殊场合中仍旧使用,但它编程繁琐、手工代码量也比较大。下面来看一个简单的Windows应用程序。例Ex_HelloMsg 一个简单的Windows应用程序#include int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)MessageBox(NULL,你好,我的Visual C+世界!,问候,0);return 0;,2.1Windows编程,在Visual C+6.0运行上述程序需要进行以下步骤:(1)选择“文件”“新建”菜单命令,显示出“新建”对话框。在“工程”标签页面的列表框中,选中Win32 Application(Win32 应用程序)项。(2)在工程编辑框中键入Win32应用程序项目名称Ex_HelloMsg。在“位置”编辑框中直接键入文件夹名称,或单击浏览按钮 选择一个已有的文件夹,这里为“D:Visual C+应用第2章”。(3)单击确定按钮继续。弹出一个向导对话框,用来询问创建的Win32应用程序的项目类型,选中An empty project项。单击完成按钮,系统将显示该应用程序向导的创建信息,单击确定按钮系统将自动创建此应用程序。(4)再次选择“文件”“新建”菜单命令,显示出“新建”对话框。在“文件”标签页面左边的列表框中选择C+Source File项,在右边的文件框中键入Ex_HelloMsg.cpp,单击确定按钮。,(5)输入上面的代码,运行程序,结果如图2.1所示。从上面的程序代码可以看出:,图2.1 Ex_HelloMsg运行结果,2.1Windows编程,C+控制台应用程序以main函数作为进入程序的初始入口点,但在Windows应用程序中,main主函数被WinMain函数取代。WinMain函数的原型如下:int WINAPI WinMain(HINSTANCE hInstance,/当前实例句柄 HINSTANCE hPrevInstance,/前一实例句柄 LPSTR lpCmdLine,/指向命令行参数的指针 int nCmdShow)/窗口的显示状态 每一个C+Windows应用程序都需要Windows.h头文件,它还包含了其他的一些Windows头文件。这些头文件定义了Windows的所有数据类型、函数调用、数据结构和符号常量。程序中结果的输出已不再是显示在屏幕上,而是通过对话框(如MessageBox)来显示或将结果绘制在用户界面元素上。MessageBox是一个Win32 API函数,用来弹出一个消息对话框。该函数第一个参数用来指定父窗口句柄,即对话框所在的窗口句柄。第二、三个参数分别用来指定显示的消息内容和对话框窗口的标题,最后一个参数用来指定在对话框中显示的按钮。下面再看一个比较完整的Windows应用程序Ex_HelloWin。,2.1Windows编程,例Ex_HelloWin 一个完整的Windows应用程序,在Visual C+6.0创建和运行上述程序的步骤与Ex_HelloMsg相同。程序运行后,单击鼠标左键,就会弹出一个对话框,结果如图2.2所示。与Ex_HelloMsg相比,示例Ex_HelloWin要复杂的多,但总可以将其分解成是两个基本函数的程序结构。一个是WinMain函数,另一个是用户定义的窗口过程函数WndProc。窗口过程函数WndProc用来接收和处理各种不同的消息,而主函数WinMain通常要完成以下几步工作:,图2.2 Ex_HelloWin运行结果,(1)调用API函数RegisterClass注册应用程序的窗口类。(2)调用相关API函数创建和显示窗口,并进行其它必要的初始化处理。其中,函数CreateWindow用来创建已注册窗口类的窗口。Windows每一个窗口都有一些基本属性,如窗口标题、窗口位置和大小、应用程序图标、鼠标指针、菜单和背景颜色等。窗口类就是充当这些属性的模板。,2.1Windows编程,(3)创建和启动应用程序的消息循环。Windows应用程序接受各种不同的消息,包括键盘消息、鼠标以及窗口产生的各种消息。Windows系统首先将消息放入消息队列中,应用程序的消息循环就是从应用程序的消息队列中检取消息,并将消息发送相应的窗口过程函数中作进一步处理。API函数GetMessage 和DispatchMessage就是起到这样的作用。(4)如果接收到WM_QUIT消息,则调用PostQuitMessage,向系统请求退出 2.1.2 Windows编程特点 1.消息驱动机制 前面已经看到,Windows应用程序和C+控制台应用程序之间的一个最根本区别,就在于C+控制台应用程序是通过调用系统函数来获得用户输入的,而Windows应用程序则是通过系统发送的消息来处理用户输入的。例如,对鼠标消息WM_LBUTTONDOWN的处理。需要注意的是,许多Windows消息都经过了严格的定义,并且适用于所有的应用程序。例如,当用户按下鼠标的左键时系统就会发送WM_LBUTTONDOWN消息,而当用户敲了一个字符键时系统就会发送WM_CHAR消息,若用户进行菜单选择或工具按钮单击等操作时,系统又会相应地发送WM_COMMAND消息给相应的窗口等等。,2.1Windows编程,2.图形设备接口 在传统的DOS环境中,想要在打印机上打印一幅图形是一件非常复杂的事情,因为用户必须根据打印机类型和指令规则向打印机输送数据。而Windows则提供了一个抽象的接口,称为图形设备接口(Graphical Device Interface,简称GDI),使得用户直接利用系统的GDI函数就能方便实现输入或输出,而不必关心与系统相连的外部设备的类型。3.基于资源的程序设计 Windows应用程序常常包含众多图形元素,例如光标、菜单、工具栏、位图、对话框等,在Windows环境下,每一个这样的元素都作为一种可以装入应用程序的资源来存放。这些资源就像C+程序中的常量一样,可以被编辑、修改,也可以被其他应用程序所共享。Visual C+6.0中就提供这样的编辑器,可“所见即所得”地对这些不同类型的资源进行设计、编辑等。4.动态链接库 动态链接库提供了一些特定结构的函数,能被应用程序在运行过程中装入和连接,且多个程序可以共享同一个动态链接库,这样就可以大大节省内存和磁盘空间。从编程角度来说,动态链接库可以提高程序模块的灵活性,因为它本身是可以单独设计、编译和调试的。,2.1Windows编程,5.进程和线程 在32位Windows多任务操作系统中,采用了进程和线程的管理模式。进程是装入内存中正在执行的应用程序。进程包括私有的虚拟地址空间、代码、数据及其它操作系统资源,如文件、管道以及对该进程可见的同步对象等。进程包括了一个或多个在进程上下文内运行的线程。线程是操作系统分配CPU时间的基本实体。线程可以执行应用程序代码的任何部分,包括当前正在被其它线程执行的那些部分。同一进程的所有线程共享同样的虚拟地址空间、全局变量和操作系统资源。在一个应用程序中,可以包括一个或多个进程,每个进程由一个或多个线程构成。2.1.3 Windows基本数据类型 在前面示例和函数原型中,有一些“奇怪”的数据类型,如前面的HINSTANCE和LPSTR等,事实上,很多这样的数据类型只是一些基本数据类型的别名,表2.1列出了一些在Windows编程中常用的基本数据类型。表2.2列出了常用的预定义句柄,它们的类型均为void*,即一个32位指针。需要说明的是:这些基本数据类型都是以大写字符出现,以与一般C+基本数据类型相区别。凡是数据类型的前缀是P或LP,则表示该类型是一个指针或长指针数据类型。如果前缀是H,则表示是句柄类型。若前缀是U,则表示是无符号数据类型,等等。Windows还提供一些宏来处理上述基本数据类型。例如,LOBYTE和HIBYTE分别用来获取16位数值中的低位和高位字节;LOWORD和HIWORD分别用来获取32位数值中的低位和高位字;MAKEWORD是将两个16位无符号值结合成一个32位无符号值,等等。,2.1Windows编程,表2.1 Windows常用的基本数据类型,2.1Windows编程,表2.2 Windows常用的句柄类型,2.2MFC编程,2.2.1 MFC概述 1987年微软公司推出了第一代Windows产品,并为应用程序设计者提供了Win16(16位Windows操作系统)API,在此基础上推出了Windows GUI(图形用户界面),然后采用面向对象技术对API进行封装。1992年推出应用程序框架产品AFX(Application Frameworks),并在AFX的基础上进一步发展为MFC产品。正因为如此,在用MFC应用程序向导(后面会讨论)创建的程序中仍然保留stdafx.h头文件包含,它是每个应用程序所必有的预编译头文件,程序所用到的Visual C+头文件包含语句一般均添加到这个文件中。MFC类的基本层次结构如图2.3所示。,2.2MFC编程,CObject类是MFC提供的绝大多数类的基类。该类完成动态空间的分配与回收,支持一般诊断、出错信息处理和文档序列化等。CCmdTarget类主要负责将系统事件(消息)和窗口事件(消息)发送给响应这些事件的对象,完成消息发送、等待和派遣(调度)等工作,实现应用程序的对象之间协调运行。CWinApp类是应用程序的主线程类,它是从CWinThread类派生而来。CWinThread类用来完成对线程的控制,包括线程的创建、运行、终止和挂起等。CDocument类是文档类,包含了应用程序在运行期间所用到的数据。CWnd类是一个通用的窗口类,用来提供Windows 中的所有通用特性、对话框和控件。CFrameWnd 类是从 CWnd 继承来的,并实现了标准的框架应用程序。CDialog 类用来控制对话框窗口。CView 是用于让用户通过窗口来访问文档。CMDIFrameWnd和CMDIChildWnd类分别用来多文档应用程序的主框架窗口和文档子窗口的显示和管理。CMiniFrameWnd类是一种简化的框架窗口,它没有最大化和最小化窗口按钮,也没有窗口系统菜单,一般很少用到它。,2.2MFC编程,2.2.2 一个MFC程序 例Ex_HelloMFC 一个MFC应用程序,(1)在Visual C+6.0运行上述MFC程序需要进行以下步骤:选择“文件”“新建”菜单命令,显示出“新建”对话框。在“工程”标签页面的列表框中,选 中Win32 Application项,创建一个Ex_HelloMFC空应用程序项目。(2)再次选择“文 件”“新建”菜单命令,显示出“新建”对话框。在文件标签页面左边的列表框中选择C+Source File项,在右边的文件框中键入Ex_HelloMFC.cpp,单击确定按钮。(3)输入上面的代码。选择“工程”“设置”菜单命令,在出现的对话框中选择“General”标签。然后在“Microsoft Foundation Classes”组合框中,选择“Use MFC in a Shared DLL”,如图2.4所示。单击确定按钮。(4)程序运行后,单击鼠标左键,就会弹出一个对话框,结果同Ex_HelloWin。,图2.4 设置工程属性,2.2MFC编程,2.2.3 理解程序代码 当用户运行应用程序时,Windows会自动调用应用程序框架内部的WinMain函数,并自动查找该应用程序类CHelloApp(从CWinApp派生)的全局变量theApp,然后自动调用CHelloApp的虚函数InitInstance,该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。下面来看看上述程序中InitInstance的执行过程。(1)首先执行的是:m_pMainWnd=new CMainFrame();该语句用来创建从CFrameWnd类派生而来的用户框架窗口CMainFrame类对象,继而调用该类的构造函数,使得Create函数被调用,完成了窗口创建工作。(2)然后执行后面两句:m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow();用作窗口的显示和更新。(3)最后返回TRUE,表示窗口创建成功。需要说明的是,由于应用程序类CWinApp派生类CHelloApp有一个全局的对象实例theApp,这使得在构造时还自动进行基类CWinApp的初始化,使得在InitInstance完成初始化工作之后,还调用基类CWinApp的成员函数Run,执行应用程序的消息循环,即重复执行接收消息并转发消息的工作。当Run检查到消息队列为空时,将调用基类CWinApp的成员函数OnIdle进行空闲时的后台处理工作。若消息队列为空且又没有后台工作要处理时,则应用程序一直处于等待状态,一直等到有消息为止。当程序结束后,调用基类CWinApp的成员函数ExitInstance,完成终止应用程序的收尾工作。,2.2MFC编程,选择“文件”“新建”菜单,在弹出的“新建”对话框中,可以看到工程标签页面中,显示出一系列的应用程序项目类型,如表2.3所示。这些类型基本满足了用户的各个层次的需要,但用户更关心的是MFC AppWizard(exe)(MFC 应用程序向导,用于创建常见的可执行Windows应用程序)类型,因为它包含了一般用户常创建的最常用、最基本的三种应用程序类型:单文档、多文档和基于对话框的应用程序。与单文档应用程序相比较,基于对话框的应用程序是最简单,也是最紧凑的。它没有菜单、工具栏及状态栏,也不能处理文档,但它的好处是速度快,代码少,程序员所花费的开发和调试时间短。多文档应用程序,顾名思义,能允许同时打开和处理多个文档。与单文档应用程序相比,增加了许多功能,因而需要大量额外的编程工作。例如它不仅需要跟踪所有打开文档的路径,而且还需要管理各文档窗口的显示和更新等。,2.2.4 MFC应用程序框架类型 Visual C+6.0中的MFC AppWizard能为用户快速、高效、自动地生成一些常用的标准程序结构和编程风格的应用程序,它们被称为应用程序框架结构。前面的示例Ex_HelloMsg和Ex_HelloWin事实上已经使用过它的Win32 Application向导类型。,2.2MFC编程,表2.3 MFC应用程序框架类型,2.3MFC程序应用,2.3.1 文档应用程序创建下面以创建一个单文档应用程序Ex_SDI为例,说明其简单地创建、编译和运行过程。1.启动 选择“开始”“程序”“Microsoft Visual Studio 6.0”“Microsoft Visual C+6.0”,运行Visual C+6.0。2.创建 选择“文件”“新建”菜单,在弹出的“新建”对话框的工程标签页面中,选择MFC AppWizard(exe)的项目类型。单击位置框右侧的按钮,在弹出的对话框中,将该应用程序的文件夹定位在“D:Visual C+应用第2章”,并在工程编辑框中输入应用程序名Ex_SDI,结果如图2.5所示。,图2.5“新建”对话框,2.3MFC程序应用,3.第一步 单击确定按钮,出现如图2.6所示的对话框,让用户进行下列选择:从单个文档(Single Document,简称SDI、单文档)、多重文档(Multiple Document,简称MDI、多文档)和基本对话框(Dialog Based,基于对话框的应用程序,简称对话框)中选择创建的应用程序类型(见图2.6中的)。这里,选择“单个文档”。决定应用程序中是否需要“文档/查看体系结构支持”(见图2.6中的)。一般情况下,应选中此项。,“文档/查看体系结构支持”应汉化成“文档/视图体系结构支持”。文档/视图体系结构是Visual C+独特的一种程序框架结构,后面将会来说明它。,选择资源所使用的语言,这里是“中文中国”(见图2.6中的)。,2.3MFC程序应用,4.第二步 单击下一步按钮,出现如图2.7所示的对话框,让用户选择程序中是否加入数据库的支持(有关数据库的内容将在以后的章节中介绍)。,图2.6“步骤1”对话框 图2.7“步骤2”对话框,2.3MFC程序应用,5.第三步 保留默认选项,单击下一步按钮,出现如图2.8所示的对话框。允许用户在程序中加入复合文档、自动化、ActiveX控件的支持。6.第四步 保留默认选项,单击下一步按钮,出现如图2.9所示的对话框,对话框的前几项依次确定对浮动工具条、打印与预览以及通信等特性的支持。,图2.8“步骤3”对话框 图2.9“步骤4”对话框,2.3MFC程序应用,7.第五步 保留默认选项,单击下一步按钮,弹出如图2.10所示的对话框,这里出现三个方面的选项,供用户来选择:应用程序的主窗口是MFC标准风格还是窗口左边有切分窗口的Windows资源管理器样式;在源文件中是否加入注释用来引导用户编写程序代码;使用动态的共享链接库还是静态链接库。8.第六步 保留默认选项,单击下一步按钮,出现如图2.11所示的对话框。在这里,用户可以对MFC AppWizard提供的默认类名、基类、各个源文件名进行修改。,图2.10“步骤5”对话框 图2.11“步骤6”对话框,2.3MFC程序应用,9.完成 单击完成按钮出现一个信息对话框,显示出用户在前面几个步骤中作出的选择内容,单击确定按钮系统开始创建,并又回到了Visual C+6.0的主界面。10.编译并运行 到这里为止,虽然没有编写任何程序代码,但Visual C+应用程序向导已根据用户的选项自动生成基本的应用程序框架。单击编译工具栏 上的运行工具按钮“”或按快捷键Ctrl+F5,系统开始编译、连接并运行生成的单文档应用程序可执行文件Ex_SDI.exe,运行结果如图2.11所示。需要说明的是:创建的单文档应用程序Ex_SDI界面和其它文档应用程序一样,都有标题栏、菜单栏、工具栏、状态栏以及客户区(文档窗口)等界面元素。,图2.12 Ex_SDI运行结果,2.3MFC程序应用,类似的,使用MFC AppWizard(exe)可以创建一个通用多文档应用程序EX_MDI(其步骤与Ex_SDI一样),编译并运行后,其结果如图2.13所示。,2.3.2 项目文件和项目配置 定位到创建时指定的根文件夹“D:Visual C+应用第2章”中,可以看到Ex_SDI和Ex_MDI两个文件夹,其中分别包含了单文档应用程序Ex_SDI和多文档应用程序Ex_MDI所有的文件和信息。由于这些应用程序还包含了除源程序外的许多信息,因此,在Visual C+中常将它们称为项目或工程。另外,Visual C+是用文件夹来管理一个应用程序项目的,且将项目名作为文件夹名,在此文件夹下包含源程序代码文件(.cpp,.h)、项目文件(.dsp)以及项目工作区文件(.dsw)等。表2.4列出了这些文件类型的的含义。,2.3MFC程序应用,表2.4 Visual C+6.0文件类型的含义,2.3MFC程序应用,除了上述文件外,还有相应的Debug(调试)或Release(发行)、Res(资源)等子文件夹。例如上述创建的单文档应用程序项目Ex_SDI,其各文件的组织如图2.14所示。当然,不同类型的项目的文件类型及数目会略有所不同。,图2.14 Ex_SDI项目管理,2.3MFC程序应用,2.3.3 项目管理 1.ClassView 项目工作区窗口的ClassView页面用以显示和管理项目中所有的类。以打开的项目名Ex_SDI为例,ClassView页面显示出“Ex_SDI classes”的树状结点,在它的前面是一个图标和一个套在方框中的符号“+”,单击符号“+”或双击图标,Ex_SDI中的所有类名将被显示,如CMainFrame、CEx_SDIApp、CEx_SDIDoc、CEx_SDIView等,如图2.15所示。,2.3MFC程序应用,在ClassView页面中,每个类名前也有一个图标和一个套在方框中的符号“+”,双击图标,则直接打开并显示类定义的头文件(如CEx_SDIView.h);单击符号“+”,则会显示该类中的成员函数和成员变量,双击成员函数前的图标,则在文档窗口中直接打开源文件并显示相应函数体代码。2.ResourceView 单击项目工作区窗口底部的ResourceView标签,打开ResourceView页面,如图2.16所示。ResourceView页面用于显示和管理项目中所有的资源,它与ClassView页面一样,都是按树层次结构来呈现不同的显示列表。在Visual C+中,每一个图片、字符串值、工具栏、图标或其他非代码元素等都可以看作是ResourceView页面中的一种资源结点,并使用了各自默认的资源结点图标。3.FileView 单击项目工作区窗口底部的FileView标签,打开FileView页面,如图2.17所示。FileView可将项目中的所有文件(C+源文件、头文件、资源文件、Help文件等)分类按树层次结构来显示。每一类文件在FileView页面中都有自己的结点,例如,所有的C+源文件都在Source File目录项中。用户不仅可以在结点项中移动文件,而且还可以创建新的结点项以及将一些特殊类型的文件放在该结点项中。,2.3MFC程序应用,2.3.4 资源和资源标识1.资源的分类 前图2.16所示的ResourceView页面显示了一个用MFC AppWizard创建的单文档应用程序Ex_SDI的所有使用到的默认资源,它可分为下列几类:(1)快捷键列表(Accelerator)。一系列组合键的集合,被应用程序用来引发一个动作。该列表一般与菜单命令相关联,用来代替鼠标操作。(2)对话框(Dialog)。含有按钮、列表框、编辑框等各种控件的窗口。(3)图标(Icon)。代表应用程序显示在Windows桌面上的位图,它同时有32x32像素和16x16像素两种规格。(4)菜单(Menu)。用户通过菜单可以完成应用程序的大部分操作。(5)字串表(String Table)。应用程序使用的全局字符串或其他标识符。(6)工具栏(Toolbar)。工具栏外观是以一系列具有相同尺寸的位图(按钮)组成的,它通常与一些菜单命令相对应,用以提高用户的工作效率。(7)版本信息(Version)。包含应用程序的版本、用户注册码等相关信息。除了上述常用资源类别外,Visual C+6.0应用程序中还可有鼠标指针、HTML等,也可以自己添加新的资源类别。,2.3MFC程序应用,2.ID标识符 在前图2.16中,可以看到每一个资源类别下都有一个或多个相关资源,每一个资源均是由标识符来定义的。当添加或创建一个新的资源或资源对象时,系统会为其提供默认的名称,如IDR_MAINFRAME等。当然,用户也可重新命名,但要按一定的规则来进行,因为这样便于在应用程序代码设计时理解和记忆。一般地,要遵循下列规则:(1)在标识符名称中允许使用字母az、AZ、09以及下划线。(2)标识符名称不区分大小写字母,如new_idd与New_Idd是相同的标识符。(3)不能以数字开头,如8BIT是不合法的标识符名。除了上述规则外,出于习惯,Visual C+还提供了一些常用的定义标识符名称的前缀供用户参考使用,见表2.5。事实上,每一个定义的标识符都保存在应用程序项目的Resource.h文件中,它的取值范围为065535。在同一个程序项目中,用户定义的资源标识符名称不能相同,不同的标识符的值也不能一样。但同时要注意,文档应用程序中的菜单、工具栏、加速键和图标资源的标识只有相同时(如都为IDR_MAINFRAME),才能在文档模板创建时通过指定其标识符来全部装载(以后还会讨论)。,2.3MFC程序应用,表2.5 常用标识符定义的前缀,2.3MFC程序应用,2.3.5 框架窗口、文档和视图 1.主框架窗口 文档应用程序中的窗口可分为两类:一类是应用程序主窗口,另一类是文档窗口。应用程序主窗口是应用程序直接放置在桌面(DeskTop)上的那个窗口,又称为主框架窗口。每个应用程序只能有一个主框架窗口,它常包含标题栏、菜单栏、工具栏和状态栏。主框架窗口的标题栏上往往显示应用程序的名称和当前活动的文档名。当用MFC AppWizard创建单文档(SDI)或多文档(MDI)应用程序时,构造的默认主框架窗口类均为CMainFrame,其源文件名分别是MainFrm.h和MainFrm.cpp。对于单文档应用程序来说,CMainFrame类是从CFrameWnd派生而来的,而对于多文档应用程序,CMainFrame类是从CMDIFrameWnd派生的。2.文档窗口 文档窗口对于单文档应用程序来说,它和主框架窗口是一致的,即主框架窗口就是文档窗口;而对于多文档应用程序,文档窗口是主框架窗口的子窗口,如前图2.13所示。文档窗口一般都有相应的可见边框,它的客户区(除了窗口标题栏、边框外的区域)是由相应的视图类(默认从CView类派生)来构成的,而CView类又是从窗口类CWnd派生,因此可以说视图是文档窗口内的子窗口。文档窗口时刻跟踪当前处于活动状态的视图的变化,并将用户或系统产生的命令消息传递给当前活动视图。而主框架窗口负责管理各个用户交互对象(包括菜单、工具栏、状态栏以及加速键)并根据用户操作相应地创建或更新文档窗口及其视图。,2.3MFC程序应用,2.3.6 对话框和控件 对话框是一个特殊类型的窗口,可以作为各种控件的容器,可用于捕捉和处理用户的多个输入信息或数据。控件是一种具有独立功能的、能进行交互的窗口。对话框和一般控件类都是从CWnd派生而来。1.创建 启动Visual C+6.0,选择“文件”“新建”菜单,在弹出的“新建”对话框的工程标签页面中,选择MFC AppWizard(exe)的项目类型。单击位置框右侧的按钮,在弹出的对话框中,将该应用程序的文件夹定位在“D:Visual C+应用第2章”,并在工程编辑框中输入应用程序名Ex_DLG,结果如图2.18所示。,图2.18“新建”对话框,2.3MFC程序应用,2.第一步 单击确定按钮,出现如图2.19所示的对话框,让用户进行下列选择:从单个文档(Single Document,简称SDI、单文档)、多重文档(Multiple Document,简称MDI、多文档)和基本对话框(Dialog Based,基于对话框的应用程序,简称对话框)中选择创建的应用程序类型。这里,选择“基本对话框”。选择资源所使用的语言,这里是“中文中国”。3.第二步 单击下一步按钮,出现如图2.20所示的对话框,让用户进行下列选择:是否包含“关于”对话框(后面还会讨论)。是否包含上下文相关帮助。一旦选择此项,则在创建的对话框中自动添加“Help”按钮,以后该程序运行后,单击此按钮或按F1键,显示自己在程序中定制的帮助信息。是否使用“3D外观”,即对话框以及中对话框中的控件具有3维立体效果。是否加入“自动化”和“ActiveX控件”的支持,以便实现OLE功能。是否加入网络组件功能(Windows Sockets,一种Windows网络协议)。在“对话框的标题是”现在的编辑框中输入要更改的对话框标题内容。,2.3MFC程序应用,图2.19“步骤1”对话框 图2.20“步骤2”对话框,2.3MFC程序应用,4.第三步 保留默认选项,单击下一步按钮,出现如图2.21所示的对话框,这里出现2个方面的选项,供用户来选择:在源文件中是否加入注释用来引导用户编写程序代码;使用动态的共享链接库还是静态链接库。5.第四步 保留默认选项,单击下一步按钮,出现如图2.22所示的对话框。在这里,用户可以对MFC AppWizard提供的默认类名、基类、各个源文件名进行修改。,图2.21“步骤3”对话框 图2.22“步骤4”对话框,2.3MFC程序应用,6.完成 此时的界面不同于文档应用程序创建后的界面,如图2.23所示。这是因为,对话框应用程序是以对话框作为该程序的主窗口,而对话框又是一种资源,故对话框应用程序创建后,开发环境将自动在右侧打开对话框资源编辑器,在这里可以通过“控件工具栏”和“布局工具栏”向对话框添加和布局控件,并可设置对话框的属性。,图2.23 Ex_DLG创建后的开发环境,2.4消息和消息映射,2.4.1 使用类向导 MFC类向导是Visual C+6.0中又一个非常有用的工具。它能自动为一个项目添加一个类、进行消息和数据映射、创建OLE Automation(自动化)属性和方法以及进行ActiveX事件处理等。打开MFC类向导可以使用下列几种方法:(1)选择“查看”“建立类向导”菜单或直接使用Ctrl+W快捷键。(2)在源代码文件的文档编辑窗口中,右击鼠标,从弹出的快捷菜单中选择“建立类向导”命令。当MFC类向导打开后,就会弹出如图2.24所示的MFC ClassWizard对话框(设Visual C+打开的是单文档应用程序Ex_SDI)。可以看到MFC ClassWizard对话框包含了5个标签页面,它们各自含义如下:Message Maps(消息映射):用来添加、删除和编程处理消息的成员函数。Member Variables(成员变量):添加或删除与控件相关联的成员变量(或称控件变量),以便与控件进行数据交换。这些控件所在的类一般是从CDialog、CPropertyPage、CRecordView或CDaoRecordView中派生的类。Automation(自动化):为支持自动化的类(如ActiveX控件类)添加属性和方法。ActiveX Events(ActiveX事件):为ActiveX控件类添加触发事件的支持。Class Info(类信息):有关项目中类的其他信息。,2.4消息和消息映射,图2.24 MFC ClassWizard对话框,2.4消息和消息映射,2.4.2 消息分类 Windows应用程序中的消息主要有下面三种类型。(1)窗口消息(Windows message)。这类消息主要是指由WM_开头的除WM_ COMMAND之外的消息,例如WM_CREATE(窗口对象创建时产生)、WM_DESTROY(窗口对象清除前发生)、WM_PAINT(窗口更新时产生绘制消息)等,一般由窗口类和视图类对象来处理。窗口消息往往带有参数,以标志处理消息的方法。(2)控件的通知消息(Control notifications)。当控件的状态发生改变(例如,用户在控件中进行输入)时,控件就会向其父窗口发送WM_COMMAND通知消息。应用程序框架处理控件消息的方法和窗口消息相同,但按钮的BN_CLICKED通知消息除外,它的处理方法与命令消息相同。(3)命令消息(Command message)。命令消息主要包括由用户交互对象(菜单、工具条的按钮、快捷键等)发送的WM_COMMAND通知消息。命令消息的处理方式与其他两种消息不同,它能够被多种对象接收、处理,这些对象包括文档类、文档模板类、应用程序本身以及窗口和视类等;而窗口消息和控件的通知消息是由窗口对象接收并处理的,这里的窗口对象是指从窗口类CWnd中派生的类的对象,它包括CFrameWnd、CMDIFrameWnd、CMDIChildWnd、CView、CDialog以及从这些派生类对象等。,2.4消息和消息映射,2.4.3 消息映射 在MFC中,上述的绝大多数消息都可通过MFC的ClassWizard来映射。将MFC ClassWizard对话框切换到Message Maps页面(参看前图2.24),可以看到它有许多选项,如项目(Project)组合框、类名(Class Name)组合框等。各项功能说明如表2.6所示。,表3.5 ClassWizard对话框的Message Maps页面功能,2.4消息和消息映射,(1)按Ctrl+W快捷键打开MFC ClassWizard对话框。(2)在Class name组合框中,将类名选定为CEx_SDIView。此时,Object IDs和Messages列表内容会相应的改变。(3)在Object IDs列表框中选定CEx_SDIView,然后拖动Messages列表框右侧的滚动块,直到出现要映射的WM_LBUTTOMDOWN消息为止。(4)双击Messages列表中的WM_LBUTTOMDOWN消息或单击Add Function按钮,都会在CEx_SDIView类中添加该消息的映射函数OnLButtonDown,同时在Member funcions列表中显示这一消息映射函数和被映射的消息,结果如图2.25所示。,图2.25 映射WM_LBUTTONDOWN消息,2.4消息和消息映射,(5)单击Edit Code按钮后,MFC ClassWizard对话框退出,并转向文档窗口,定位到OnLButtonDown函数源代码处。(6)添加下列代码:void CEx_SDIView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call default MessageBox(你好,我的Visual C+世界!,问候,0);CView:OnLButtonDown(nFlags,point);(7)这样就完成了一个消息映射过程。程序运行后,在窗口客户区单击鼠标左键,就会弹出一个消息对话框。消息映射代码框架 2.4.4 查看CEx_SDIView程序代码,可以发现:MFC ClassWizard为 WM_LBUTTOMDOWN的消息映射作了以下三个方面内容的安排:(1)在头文件Ex_SDIView.h中声明消息处理函数OnLButtonDown:protected:/AFX_MSG(CEx_SDIView)afx_msg void OnLButtonDown(UINT nFlags,CPoint point);/AFX_MSG DECLARE_MESSAGE_MAP(),2.4消息和消息映射,代码中的/AFX_MSG(CEx_SDIView)和/AFX_MSG之间的部分是MFC ClassWizard定义的专门用作消息映射函数声明的标记。表示该程序块中的消息映射声 明是由ClassWizard来自动管理的,用户一般不需要去更改。需要说明的是,凡/和/之间的程序代码块均由ClassWizard自动管理。(2)在Ex_SDIView.cpp源文件前面的消息映射入口处,添加了相应的消息映射宏:BEGIN_MESSAGE_MAP(CEx_SDIView,CView)/消息映射开始/AFX_MSG_MAP(CEx_SDIView)ON_WM_LBUTTONDOWN()/AFX_MSG_MAP END_MESSAGE_MAP()/消息映射结束(3)在Ex_SDIView.cpp文件中写入一个空的消息处理函数的模板,以便用户填入具体代码,如下面的框架:void CEx_SDIView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call default CView:OnLButtonDown(nFlags,point);,2.4消息和消息映射,

    注意事项

    本文(【教学课件】第二章MFC编程和操作.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开