1、1.6 习 题1. 填空题(1) 项目工作区一般在集成开发环境的左侧。它展示一个项目的几个方面,它们分别是 ClassView、ResourceView 和 FileView。 (2) 编译程序的快捷键是 Ctrl+F7,链接程序的快捷键是 F7,运行程序的快捷键是 Ctrl+F5。(3) 项目工作区文件的扩展名为 .dsw 。(4) 应用程序向导 AppWizard 的作用是 帮助用户一步步生成一个新的应用程序,并且自动生成应用程序所需的基本代码 。通过 ClassWizard 可以增加消息映射和成员变量。(5) 菜单选择可以通过两种方法来进行:一种是 鼠标操作 ;另一种是键盘操作 。(6)
2、 编译微型条工具栏最右边按钮的功能是 Insert/Remove Breakpoint 。(7) 快捷键或菜单及相关资源的资源符号的前缀是 IDR_。(8) 用户可以通过项目工作区窗口的 ResourceView 视图来查看资源。2. 选择题(1) 项目文件的扩展名是( )。A. .exe B. .dsp C. .dsw D. .cpp(2) 设置断点的默认方式是( )。(第 2 章)A. Location B. Data C. Message D. Breakpoints(3) 用应用程序向导 AppWizard 创建 C+源文件,应选择( )选项卡。A. Files B. Projects
3、 C. Workspaces D. Other Documents (4) Standard 工具栏中最左边按钮与( )菜单命令的功能一样 。A. New B. New File C. New Text File D. New Workspace(5) Windows 资源提供的资源编辑器不能编辑( )。A. 菜单 B. 工具栏 C. 状态栏 D. 位图3. 判断题(1) 打开一个项目,只需打开对应的项目工作区文件。 ( T )(2) 用户可以通过 Tools | Customize 菜单命令设置集成开发环境的工具栏。 ( T )(3) 通过应用程序向导 AppWizard 建立的程序不能被立
4、即执行。 ( F )(4) 在同一项目中,Visual C+在内部用来标识资源的资源符号不能重复。 ( T )(5) 在 Windows 环境下,资源与程序源代码紧密相关。 ( F )4. 简答题(1) 什么是项目? 它是由什么组成的?在 Visual C+集成开发环境中,把实现程序设计功能的一组相互关联的 C+源文件、资源文件以及支撑这些文件的类的集合称为一个项目。项目是 Visual C+ IDE 开发程序的基本单位,一个项目至少包含一个项目文件,项目文件的扩展名为.dsp。项目文件保存了项目中所用到的源代码文件和资源文件的信息,如文件名和路径等。同时,项目文件还保存了项目的编译设置等信息
5、,如调试版(debug) 和发布版(release)。另外,根据项目类型的不同,一个项目包含有不同的源文件、资源文件和其他类别的文件。(2) 解释项目工作区中各个视图的功能。ClassView 用于显示项目中定义的类; ResourceView 用于显示项目中所包含的资源文件;FileView 用于显示所创建的项目。(3) WizardBar 工具栏的作用是什么?WizardBar 工具栏可以对 ClassView 和 ClassWizard 中的命令进行快速访问,使类和成员函数的操作更加方便,WizardBar 会自动跟踪用户程序的上下文。(4) 简述向项目添加一个资源的方法。用户可以通过在
6、 Insert 菜单中选择 Resource 菜单项来创建新的资源。单击 Resource 菜单项,弹出 Insert Resource 对话框。首先在对话框的左侧选择资源类型,然后根据具体情况,单击右侧的不同按钮。若资源需要临时创建,则单击 New 按钮,在打开的相应资源编辑器中创建资源。若资源文件已经存在,则单击 Import 按钮,在 Import Resource 对话框中选择资源文件,然后单击 Import 按钮。2.5 习 题1.填空题(1) MFC 的全称是 Microsoft Foundation Class 。 (2) Windows 是一个基于 事件 的消息驱动系统。(3)
7、 句柄是Windows 使用的一种无重复整数,主要用来 标识应用程序中的一个对象。(4) 利用 MFC AppWizardexe可以创建三种类型的应用程序,即 单文档、多文档和基于对话框的应用程序。(5) 一个单文档的MFC 应用程序框架一般包括 5 个类,它们分别是 应用程序类、框架窗口类、视图类、文档类 和文档模板类。(6) Windows 消息主要有 3 种类型,即 标准 Windows 消息、控件消息和命令消息 。(7) MFC 采用 消息映射 来处理消息。(8) CWinApp 提供 4 个成员函数来实现传统 SDK 应用程序 WinMain( )函数完成的工作。2.选择题(1)Wi
8、ndows 应用程序是按照( )非顺序的机制运行的。A事件消息处理B消息事件处理C事件处理消息D以上都不对(2) 下面( )不是 MFC 应用程序外观的选项。ADocking toolbar BContext-sensitive Help CActiveX Controls DPrinting and print preview(3) 对 MFC 类的下列描述中,( )是错误的。A应用程序类 CWinApp 是 CWinThread 的子类B窗口类 CWnd 提供了 MFC 中所有窗口类的基本功能CCView 是 CWnd 类的子类DCDocTemplate 类是 Template 类的子类(
9、4)下列( )不是 MFC 消息映射机制有关的宏。ADECLARE_MESSAGE_MAP( )宏BBEGIN_MESSAGE_MAP( )宏 CDECLARE_SERIAL( ) 宏 DEND_MESSAGE_MAP( ) 宏3.判断题(1) 窗口是 Windows 应用程序的基本操作单元,是应用程序与用户之间交互的接口环境,也是系统管理应用程序的基本单位。 ( t )(2) 所有的Windows 应用程序都是消息驱动的。(t )(3) 所有的 Windows 应用程序都是用 MFC AppWizardexe向导创建的。 ( f )(4) 使用 MFC AppWizardexe向导创建应用程
10、序框架时,向导生成的文件名和类名是不可更改的。 ( f )(5) 消息映射是将消息处理函数与它要处理的特定消息连接起来的一种机制。 (t )(6) 命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND 消息。 ( t ) (7) 利用 MFC 编程时,所有的消息与消息处理函数的添加都必须采用 ClassWizard 类向导来完成。 ( f )(8) WinMain 函数是所有 Windows 应用程序的入口。 ( t ) (9) 用快捷键 F9 既可设置断点,又可取消断点。 ( t )(10)调式程序时,会同时出现 Variable 窗口和 Watch 窗口。 ( t
11、 ) 4.简答题(1) 简述 MFC 应用程序的执行过程。MFC 应用程序启动时,首先创建应用程序对象 theApp。这时将自动调用应用程序类的构造函数初始化对象 theApp,然后由应用程序框架调用 MFC 提供的 WinMain( )主函数。在 WinMain( )主函数中,首先通过调用全局函数 GetApp( )来获取 theApp 的指针 pApp,然后通过该指针调用 theApp 的成员函数 InitInstance( )来初始化应用程序。在应用程序的初始化过程中,同时还构造了文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。当 InitInstance( )函数执行
12、完毕后,WinMain( )函数将调用成员函数 Run( ),进入消息处理循环,直到函数 Run( )收到 WM_QUIT 消息。MFC 首先调用 CWinApp 类的成员函数 ExitInstance( ),然后调用静态对象的析构函数,包括 CWinApp 对象,最后退出应用程序,将控制权交给操作系统。在初始化的最后,应用程序将收到 WM_PAINT 消息,框架会自动调用视图类的OnDraw()函数绘制程序客户区窗口。这时,应用程序的基本窗口已经生成,应用程序准备接收系统或用户的消息,以便完成用户需要的功能。如果消息队列中有消息且不是WM_QUIT 消息,则将消息分发给窗口函数,以便通过 M
13、FC 消息映射宏调用指定对象的消息处理函数。如果消息队列中没有消息,函数 Run( )就调用函数 OnIdle( )进行空闲时间的处理。(2) 简述文档/视图与其他类对象的关系。在 MFC 应用程序中,文档类和视图类是用户最常用的两个类,它们之间是密切相关的。文档视图体系结构是 MFC 应用程序框架结构的基石,它定义了一种程序结构,这种结构利用文档对象保存应用程序的数据,依靠视图对象控制视图显示数据,文档与视图的关系是一对多的关系,也就是说,文档中的数据可以以不同的方式显示。MFC 在类CDocument 和 CView 中为文档和视图提供了基础结构。CWinApp、CFrameWnd 和其他
14、类与 CDocument 和 CView 共同把所有的程序片段连在一起。文档/视图与其他类对象的关系如下图所示。 应 用 程 序 对 象 文 档 模 板 对 象 文 档 对 象 视 图 对 象 框 架 窗 口 对 象 (3) 简述 MFC 消息映射机制。MFC 采用消息映射来处理消息。这种消息映射机制包括一组消息映射宏,用于把一个Windows 消息和其消息处理函数联系起来。 MFC 应用程序框架提供了消息映射功能,所有从 CCmdTarget 类派生出来的类都能够拥有自己的消息映射。(4) 消息 WM_LBUTTONDOWN 的消息映射宏和消息处理函数是什么?消息 WM_LBUTTONDOW
15、N 的消息映射宏是 ON_WM_LBUTTONDOWN( ) ,消息处理函数是 OnRButtonDown()。(5) 如何自定义消息?如何发送自定义消息?Windows 将所有的消息值分为 4 段:0x00000x03FF 消息值范围段用于 Windows 系统消息,0x04000x7FFF 段用于用户自定义的窗口消息, 0x80000xBFFF 段为 Windows保留值,0xC0000xFFFF 段用于应用程序的字符串消息。常量 WM_USER(为 0x0400)与第一个自定义消息值相对应,用户必须为自己的消息定义相对于 WM_USER 的偏移值,利用#define 语句直接定义自己的消
16、息,如下所示:#define WM_USER WM_USER+3 ;/ 自定义消息 WM_USER 也可以调用窗口消息注册函数 RegisterWindowMessage( )来定义一个 Windows 消息,由系统分配消息一个整数值。该函数原型为:UINT RegisterWindowMessage(LPCTSTR lpString);其中参数 lpString 是要定义的消息名,调用成功后将返回该消息的 ID 值。发送自定义消息消息采用的函数是 SendMessage( )函数。(文中未讲清楚)3.7 习 题1填空题(1) Windows 引入 GDI 的主要目的是为了实现 设备无关性 。
17、 (2) 与 DOS 字符方式下的输出文本不同,Windows 是按 图形 方式输出的。(3) 为了体现 Windows 的设备无关性,应用程序的输出面向一个称之为 设备环境 的虚拟逻辑设备。(4) 在一个 MFC 应用程序中获得 DC 的方法主要有两种:一种是 接受一个参数为指向 CDC 对象的指针;另一种是声明一个 MFC 设备环境类的对象,并使 用 this 指针为该对象赋值。(5) Windows 用 COLORREF 类型的数据存放颜色,它实际上是一个 32 位整数。它采用 3 个参数表示红、绿、蓝分量值,这 3 个值的取值范围为 0255 。(6) 库存对象是由操作系统维护的用于绘
18、制屏幕的常用对象,包括库存画笔、画刷、字体 等。(7) 可以利用 CGdiObject 类的成员函数 CreateStockObject( ) 将 GDI 对象设置成指定的库存对象。(8) 创建画笔后必须调用 CDC 类的成员函数 SelectOject( ) 将创建的画笔选入当前设备环境。(9) 在默认情况下输出文本时,字体颜色是 黑色 ,背景颜色是 白色 ,背景模式为 不透明模式 。(10) 创建画笔的方法有两种,一种是 定义画笔对象时直接创建,另一种是先定义一个没有初始化的画笔对象,再调用 CreatePen( )函数创建指定画笔。2选择题(1) 下面( )不是 MFC 设备环境类 CD
19、C 类的派生类。AGDI 类 BCPaintDC 类 CCClientDC 类 DCWindowDC 类(2) 下面( )不是 GDI 对象。ACFont 类 BCPalette 类 CCClientDC 类 DCBitmap 类(3) 下列描述中,( )是错误的。ACreatePointFont( )是 CFont 类提供的创建函数B可使用 SetTextAlign( )函数改变文本对齐方式C使用函数 GetTextMetrics( )可以获得所选字体中指定字符串的宽度和高度D可使用 DrawText( )函数在给定的矩形区域内输出文本(4) 下列( )不是 MFC CDC 类中常用的文本输
20、出函数。ATextOut( ) BDrawText( ) CExtTextOut( ) DExtDrawText( )3判断题(1) CDC 类是 MFC 设备环境类的基类。 ( t )(2) CClientDC 代表整个窗口的设备环境。 ( f )(3) CPen 和 CFont 均是 GDI 对象。 ( t )(4) 深绿色 RGB 值为(0,128,0) ( t )(5) 删除 CPen 对象可调用 CPen 对象的 DeleteObject( )函数。 ( f )(6) 创建阴影画刷函数是 CreateHatchBrush( )。 ( t )(7) 默认的对齐方式是 TA_LEFT|
21、TA_BOTTOM。 ( f )(8) DDB 又称 GDI 位图,它依赖于具体设备,只能存在于内存中。 ( t )4简答题(1) GDI 创建哪几种类型的图形输出?应用程序可以使用 GDI 创建 3 种类型的图形输出:矢量图形、光栅图形和文本。(2) 什么是设备环境?它的主要功能有哪些?设备环境 DC 也称设备描述表或设备上下文。设备环境 DC 是由 GDI 创建、用来代表设备连接的数据结构。DC 的主要功能有以下几种: 允许应用程序使用一个输出设备。 提供 Windows 应用程序、设备驱动和输出设备之间的连接。 保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和
22、背景等影响图形输出的绘图模式。 保存窗口剪切区域(Clipping Region),限制程序输出到输出设备中窗口覆盖的区域。(3) 什么是 GDI,它有什么功能?MFC 将 GDI 函数封装在哪个类中?GDI 是 Windows 提供了一个图形设备接口的抽象接口。GDI 负责管理用户绘图操作时功能的转换,其主要功能是实现设备无关性。MFC 将 GDI 函数封装在 CDC 类中。(4) 请叙述设备无关性的含义,实现设备无关性需要哪几个环节?所谓设备无关性,是指操作系统屏蔽了硬件设备的差异,使用户编程时一般无须考虑设备的类型,如不同种类的显示器或打印机。当然,实现设备无关性的另一个重要环节是设备驱
23、动程序。不同设备根据其自身不同的特点(如分辨率和色彩数目) 提供相应的驱动程序。下图描述了 Windows 应用程序的绘图过程。 应用程序 设备环境 图形设备接口 设备驱动程序 物理设备 (5) MFC 提供了哪几种设备环境类?它们各自有什么用途?MFC 提供的设备环境类包括 CDC、CPaintDC、CClientDC、CWindowDC 和 CMetaFileDC 等,其中 CDC 类是 MFC 设备环境类的基类,其他 MFC 设备环境类都是CDC 类的派生类,各个设备环境类的功能如下表所示。设备环境类 功能描述CDC 所有设备环境类的基类,对 GDI 的所有绘图函数进行了封装;可用来直接
24、访问整个显示器或非显示设备(如打印机等 )的上下文CPaintDC CPaintDC 用于响应窗口重绘消息(WM_PAINT)的绘图输出,不仅可对客户区进行操作,还可以对非客户区进行操作CClientDC 代表窗口客户区的设备环境,一般在响应非窗口消息并对客户区绘图时要用到该类CWindowDC 代表整个窗口的设备环境,包括客户区和非客户区;除非要自己绘制窗口边框和按钮,否则一般不用它CMetaFileDC 代表 Windows 图元文件的设备环境;一个 Windows 图元文件包括一系列的图形设备接口命令,可以通过重放这些命令来创建图形;对 CMetaFileDC 对象进行的各种绘制操作可以
25、被记录到一个图元文件中(6) 简述传统的 SDK 获取设备环境的方法。传统的 SDK 获取设备环境的方法有两种。在 WM_PAINT 消息处理函数中通过调用API 函数 BeginPaint( )获取设备环境,在消息处理函数返回前调用 API 函数 EndPaint( )释放设备环境。如果绘图操作不是在 WM_PAINT 消息处理函数中,需要通过调用 API 函数GetDC( )获取设备环境,调用 API 函数 ReleaseDC( )释放设备环境。(7) 简述创建和使用自定义画笔的步骤。如果要在设备环境中使用自己的画笔绘图,首先需要创建一个指定风格的画笔,然后选择所创建的画笔,最后还原画笔。
26、(8) 简述采用 MFC 方法编程时,显示一个 DDB 位图的步骤。采用 MFC 方法编程时,显示一个 DDB 位图需要执行以下几个步骤。 声明一个 CBitmap 类的对象,使用 LoadBitmap( )函数将位图装入内存。 声明一个 CDC 类的对象,使用 CreateCompatibleDC( )函数创建一个与显示设备环境兼容的内存设备环境。 使用 CDC:SelectObject( )函数将位图对象选入设备环境中,并保存原来设备环境的指针。 利用 CDC 的相关输出函数输出位图。 使用 CDC:SelectObject( )函数恢复原来设备环境。4.6 习 题1. 填空题(1) 常见
27、的菜单类型有主菜单、弹出菜单和快捷菜单 3 种。(2) 在 Visual C+中,每一个快捷键除了 ID 属性外,还有两个属性: 键 和类型 。 (3) 基于对话框的应用程序在运行时 没有 菜单栏。(4) 在 MFC 中,工具栏的功能由类 CToolBar 实现。(5) 调用 CToolBar 类的成员函数 CToolBar:Create( )或 CreateEx( ) 创建并初始化工具栏窗口对象。(6) 设置工具栏停靠特性,需要调用 EnableDocking( ) 函数。(7) 状态栏实际上是一个窗口,一般分为几个 窗格 ,用来显示不同的信息。(8) 在 MFC 中,状态栏的功能由 CSt
28、atusBar 类实现。(9) 状态栏显示的内容由数组 indicators 决定,需要在状态栏中显示各窗格的 标识符、位置以及个数。(10) CStatusBar 类的成员函数 SetPaneInfo() 用来设置给定索引值的窗格 ID、风格和宽度,成员函数 SetPaneText() 用来更新窗格的文本2. 选择题(1) 在编辑某菜单项时,若要指明该菜单项是一个弹出式子菜单,必须选择属性对话框中的( )。ASeparator BPop-up CInactive DGrayed(2) 要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示,必须设置工具栏的风格为( )。ACBRS_TOOLTIPS
29、BCBRS_FLYBYCCBRS_NOALIGN DWS_VISIBLE(3) MFC 应用程序框架为状态栏定义的静态数组 indicators 放在文件( )中。AMainFrm.cpp BMainFrm.h CstdAfx.cpp DstdAfx.h(4) 下列有关菜单的叙述中不确的是( )。A“第二种方法是把声音文件加入到资源中,然后从资源中播放声音。Visual C+支持 WAVE 型资源,用户在资源视图中单击鼠标右键并选择 Import 命令,然后在文件选择对话框的文件类型选择框中选择 Wave File(*.wav)文件,然后在文件选择框中选择 Sound.wav,则将 Sound
30、.wav 文件加入到 WAVE 资源中。缺省时声音资源的 ID 为 IDR_WAVE1,则下面的调用会播出该声音:PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetInstanceHandle(), SND_RESOURCE|SND_ASYNC);第三种方法是用 PlaySound()函数播放系统声音,Windows 启动的声音是由 SystemStart 定义的系统声音,因此可以用下面的方法播放启动声音:PlaySound(“SystemStart”,NULL,SND_ALIAS|SND_ASYNC);(3) 简单比较命令字符串接口 mciSendStri
31、ng()和命令消息接口 mciSendCommand()。命令字符串接口 mciSendString()具有简单易学的优点,但这种接口与 C/C+的风格相距甚远,如果程序要查询和设置大量数据,那么用字符串的形式将很不方便。命令消息接口 mciSendCommand()提供了 C 语言接口,它速度更快,并且更能符合 C/C+程序员的需要。(4) 什么是 ActiveX 控件?它有何特点?答:ActiveX 技术建立在微软的 COM 技术之上,并使用 COM 的接口和交互模型使ActiveX 控件与其容器进行完全无缝的集成。ActiveX 主要由 ActiveX 容器、ActiveX 服务器、Ac
32、tiveX 控件等组成。ActiveX 控件是一组封装在 COM 对象中的功能模块。这个COM 对象是独立的,尽管它不能单独运行。ActiveX 控件只能在 ActiveX 容器中运行,如Visual C+或 Visual Basic 应用程序。ActiveX 控件使用.ocx 为其文件扩展名,可以把它插入许多不同的程序中,并把它当作程序本身的一部分来使用。(5) 简述在程序中添加 ActiveX 控件的步骤。答:下面以向对话框应用程序中添加一个 Calendar Control8.0 控件为例,说明在程序中添加和使用 ActiveX 控件的具体步骤。 使用 MFC AppWizardexe创
33、建一个新的对话框应用程序。 在 AppWizard 的第二步保留 ActiveX Controls 的复选框为选中状态,应用程序标题设为 ActiveX Controls。 在生成了应用程序外壳之后,删除所有控件。 从 Visual C+菜单中选择 Project|Add To Project|Components and Controls,打开Components and Controls Gallery 对话框. 在 Components and Controls Gallery 对话框中,找到 Registed ActiveX Controls 文件夹,显示所有已注册的 AxtiveX 控件。 选中要添加的控件,如 Calendar Control8.0 控件,单击 Insert 按钮。当提问是否要在项目中插入该控件时,单击消息框中的 OK 按钮。 在 Confirm Classes 对 话 框 中 , 单 击 OK 按 钮 以 添 加 所 指 定 的 C+类 。 在 Components and Controls Gallery 对话框中,单击 Close 按钮,以完成给项目添加控件的工作。