1 / 26

第 10 章 单文档应用程序设计

第 10 章 单文档应用程序设计. 本章主要内容. 创建单文档应用程序 输入输出处理 菜单 滚动条 工具栏和状态栏 对话框和控件. 创建单文档应用程序. MFC 的文档 / 视图结构将 Windows 应用程序的功能划分在不同的类中。 利用 MFC 提供的运行机制和消息传递机制,构成应用程序的类通过传递消息、调用接口函数,共同完成程序的功能。. AppWizard 向导创建的类和文件. AppWizard 向导为生成的派生类创建单独的源文件,缺省情况下,类名和类源文件名是基于项目名的(可以在 AppWizard 向导创建应用程序过程中指定其他名称)。

Download Presentation

第 10 章 单文档应用程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第10章 单文档应用程序设计

  2. 本章主要内容 • 创建单文档应用程序 • 输入输出处理 • 菜单 • 滚动条 • 工具栏和状态栏 • 对话框和控件 《面向对象技术与Visual C++》--第10章

  3. 创建单文档应用程序 • MFC的文档/视图结构将Windows应用程序的功能划分在不同的类中。 • 利用MFC提供的运行机制和消息传递机制,构成应用程序的类通过传递消息、调用接口函数,共同完成程序的功能。 《面向对象技术与Visual C++》--第10章

  4. AppWizard向导创建的类和文件 • AppWizard向导为生成的派生类创建单独的源文件,缺省情况下,类名和类源文件名是基于项目名的(可以在AppWizard向导创建应用程序过程中指定其他名称)。 • AppWizard向导为单文档应用程序创建4个派生类和其它一些文件。这4个类分别是文档类、视图类、主框架窗口类和应用程序类。 《面向对象技术与Visual C++》--第10章

  5. 应用程序的运行机制 • MFC应用程序有自己特殊的运行机制,下面以WinHello程序为例,列出应用程序的执行过程: • 调用CWinApp的构造函数; • 程序入口函数WinMain接受控制; • WinMain调用应用程序类的InitInstance函数; • WinMain进入消息循环; • WinMain退出,程序中止。 《面向对象技术与Visual C++》--第10章

  6. 消息处理机制 • MFC应用程序与其他任何 Windows 程序一样,也使用消息驱动机制,但 MFC 提供的消息处理机制使得消息的处理更加容易。 • MFC中消息可以分为三类: • Windows 消息:包括以 WM_开头的消息,但 WM_COMMAND 除外。Windows消息由窗口和视图处理。这种消息通常附带一些参数传递给处理函数,这些参数为处理函数正确地处理消息提供了必要的信息。 • 控件通知消息:当控件的状态发生改变(例如用户利用利用控件进行输入)时,控件就会向其父窗口发送控件通知消息。MFC对控件通知消息的传递方式与其他以WM_开头的 Windows 消息一样,但 BN_CLICKED 是个例外,该消息的传递方式与命令消息的传递机制一样。 • 命令消息:包括来自于菜单、工具栏中的按钮和加速键等用户界面对象的WM_COMMAND 通知消息。 《面向对象技术与Visual C++》--第10章

  7. 输入输出处理 • 输入输出处理是应用程序最基本的功能。 • Windows应用程序通过GDI提供的绘图函数在窗口的客户区输出数据,通过对键盘消息和鼠标消息的响应,完成对用户输入的处理。 《面向对象技术与Visual C++》--第10章

  8. 输入输出处理 • 文本输出:CDC类中的成员函数 • 键盘:按键消息、虚拟键代码、字符消息 • 鼠标:鼠标消息和鼠标处理 《面向对象技术与Visual C++》--第10章

  9. 虚拟键代码 • 键盘类型根据语言或国家的不同而不同,为了避免依赖于特定国家的键盘布局,Windows键盘驱动程序将键盘的扫描码转换为一组标准虚拟键代码,和按键消息一起传给应用程序。 《面向对象技术与Visual C++》--第10章

  10. 鼠标消息 • 当用户移动鼠标或释放松开鼠标按钮时,将产生鼠标消息。 • 鼠标消息可以分成两类:客户区鼠标消息和非客户区鼠标消息。 • 非客户区包括窗口的边界、标题栏、菜单、滚动条、最大化最小化按钮。 • 客户区鼠标消息指的是鼠标在这些区域的操作而产生的消息。这种消息一般由系统处理。应用程序主要处理鼠标在客户区的操作而产生的消息。 《面向对象技术与Visual C++》--第10章

  11. 菜单 • 菜单(Menu)以可视的方式提供了对应用程序功能的选择,是用户与应用程序之间进行交互的主要方式之一。 《面向对象技术与Visual C++》--第10章

  12. 菜单简介 • 菜单主要有弹出式和下拉式两种。 • 弹出式菜单可以出现在屏幕的任何位置,是为了响应鼠标右键按钮而激活弹出式菜单。 • 下拉式菜单可以看成由一个顶层菜单和弹出式菜单装配而成。当选择顶层菜单项时,下拉出一个子菜单,子菜单中是具体的菜单项。在子菜单项中选择时,还可以再下拉出另一个子菜单,形成级联菜单。 《面向对象技术与Visual C++》--第10章

  13. 菜单的建立和实现 • 菜单编辑器的使用。 • 为程序加入菜单的操作分为以下几步: • 通过菜单编辑器生成菜单界面 ; • 建立菜单项和消息处理函数的映射; • 在处理函数中添加菜单项功能代码。 《面向对象技术与Visual C++》--第10章

  14. 滚动条 • 滚动功能使用户可以阅读和编辑大于视图窗口的任何东西--无论是文本、表格、数据库记录还是图像。 • 只要它所需的空间超出了客户区域所能提供的空间,就可以使用滚动条。 《面向对象技术与Visual C++》--第10章

  15. 在程序中加入滚动功能 • CScrollView是从CView类派生的专用视图类。从CScrollView类派生的视图类自动将滚动条加入视图窗口,并提供了支持滚动操作的大多数代码。 • 所有的GDI函数都使用逻辑坐标,Windows将GDI函数中指定逻辑坐标映射为设备坐标。 《面向对象技术与Visual C++》--第10章

  16. 在程序中实现分割功能 • 动让用户阅读超过窗口的长文档,但用户也只能看文档的某一部分,如果用户想同时阅读文档中相隔很远的部分,就只能同时打开两个窗口,分别滚动到相应的位置阅读。 • Windows提供窗口分割功能,实现同时阅读长文档的不同部分。 • 在窗口的垂直滚动条的上部和水平滚动条的底部,存在一个分割框区域,双击分割框或拖动分割框到所需的位置,窗口被垂直或水平地分成两个独立的窗口,被分割后的窗口称为面板,用以显示同一文档或图形的不同部分。 《面向对象技术与Visual C++》--第10章

  17. 工具栏和状态栏 • 工具栏和状态栏是Widows应用程序中常见的用户界面。 • 工具栏是一种快捷操作的工具,常用的命令通常放在工具栏中,方便操作。 • 而状态栏则用于显示目前程序的执行状态和说明。 《面向对象技术与Visual C++》--第10章

  18. 工具栏的实现 • 具栏包含一系列的位图按钮,通常情况下,单击按钮等价于从菜单中选择相应的菜单项。 • 工具栏可以停靠在父窗口的顶部,也可以停靠在父窗口的任何靠边的位置,或者脱离父窗口,移动到自己的框架窗口内。 • 停靠工具栏(Docking Toolbars)指的是和父窗口相连的工具栏。与之相对就就是浮动工具栏(Floating Toolbars)。 《面向对象技术与Visual C++》--第10章

  19. ToolbarDemo程序的图形菜单有直线、矩形和圆形三种选择,相应的,在工具栏中需要建立这三种按钮。具体操作步骤如下:ToolbarDemo程序的图形菜单有直线、矩形和圆形三种选择,相应的,在工具栏中需要建立这三种按钮。具体操作步骤如下: • 打开工具栏编辑器,修改AppWizard向导生成的预定义工具栏。在工具栏面板中删除向导生成的缺省按钮,只留下一个空白按钮。用鼠标将按钮拖出工具栏面板就删除该按钮; • 创建直线按钮。选择图形工具栏中的直线,在按钮绘制区域从左上角到右下角画直线。完成后,双击生成的直线按钮,弹出Toolbar Button Properties对话框。在Toolbar Button Properties对话框中设置按钮的ID(标识符)以及Prompt(提示信息)。在ID框中,输入ID_LINE; • 一旦编辑完第一个按钮的内容,在它右面会出现一个新的空白按钮。单击这个空白按钮,继续编辑下一个按钮; • 创建矩形按钮。选择图形工具条中的矩形,在空白按钮中绘出一个矩形。按钮的ID取值为ID_RECTANGLE; • 按以上步骤,再添加一个圆形按钮。ID取值为ID_CIRCLE。完成工具栏的设计。 《面向对象技术与Visual C++》--第10章

  20. 状态栏的实现 • 状态栏一般都停靠在主框架窗口的底部,包含多个面板,用做文本输出或指示器,而且也无须改变其位置。 • 如果在AppWizard向导的Step 4 对话框中选择了Initial status bar 项,AppWizard向导生成的应用程序就拥有一个缺省的状态栏。 • 设计状态栏的任务是:定义提示信息,建立特定状态和提示信息的联系。 《面向对象技术与Visual C++》--第10章

  21. 对话框和控件 • 对话框用于显示消息和取得用户数据,是Windows应用程序中最常用的用户界面。对话框作为一个容器,通常包括各种控件,如编辑框、按钮、组合框和列表框等。 • 用户通过在编辑框中输入信息,通过对列表框、单选框等的选择,为应用程序提供必要的数据。 • 对话框有两种类型:模式对话框和非模式对话框。这两种形式的对话框在打开和关闭方式上存在区别。 MFC的Dialog 类是对话框类的基类,提供了对话框的打开、关闭和管理对话框及对话框中的控件等功能。 《面向对象技术与Visual C++》--第10章

  22. 控件简介 • 控件是Windows 应用程序和用户进行交互的常用手段。在Visual C++中,控件可以分成三类:Windows 标准控件、ActiveX 控件和其他 MFC 控件类。 • Windows 标准控件由 Windows 操作系统提供,包括按钮、复选框、列表框 和静态文本等。 • 控件一般成组地放置在特殊的窗口中,这种特殊窗口或者是对话框或者是表单(Form)。 《面向对象技术与Visual C++》--第10章

  23. 《面向对象技术与Visual C++》--第10章

  24. 《面向对象技术与Visual C++》--第10章

  25. 模式对话框 • 模式对话框(Modal Dialog)的特点是:对话框始终位于应用程序的最顶层,在对话框被关闭之前,用户不能选择应用程序的其他功能。应用程序的大部分对话框都是模式对话框。 • 对话框的建立可分为如下几步: • 通过对话框编辑器设计对话框的界面; • 建立管理对话框的类; • 定义数据成员; • 定义消息处理; • 显示对话框。 《面向对象技术与Visual C++》--第10章

  26. 非模式对话框 • 非模式对话框和模式对话框的主要区别是: • 非模式对话类的实例声明为全局对象或用new操作符生成。因为显示函数返回后,非模式对话框通常还要继续打开。 • 非模式对话框的显示使用CDialog::Create函数而非CDialog::DoModal函数。CDialog::Create立即返回,但非模式对话框继续保持。 • 关闭非模态对话框使用CWnd::Destroy函数而不是EndDialog函数。因而不能使用MFC为OK按钮和Cancel按钮提供的缺省处理。需要自定义OnCancle消息处理函数处理非模式对话框的关闭,如果有OK按钮,还要定义OnOk函数消息处理函数。 《面向对象技术与Visual C++》--第10章

More Related