VisualC++程序设计与应用教程课后答案Word格式.docx
《VisualC++程序设计与应用教程课后答案Word格式.docx》由会员分享,可在线阅读,更多相关《VisualC++程序设计与应用教程课后答案Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
(2)用户可以通过Tools|Customize菜单命令设置集成开发环境的工具栏。
(3)通过应用程序向导AppWizard建立的程序不能被立即执行。
(F)
(4)在同一项目中,VisualC++在内部用来标识资源的资源符号不能重复。
(T)
(5)在Windows环境下,资源与程序源代码紧密相关。
(F)
4.简答题
(1)什么是项目?
它是由什么组成的?
在VisualC++集成开发环境中,把实现程序设计功能的一组相互关联的C++源文件、资源文件以及支撑这些文件的类的集合称为一个项目。
项目是VisualC++IDE开发程序的基本单位,一个项目至少包含一个项目文件,项目文件的扩展名为.dsp。
项目文件保存了项目中所用到的源代码文件和资源文件的信息,如文件名和路径等。
同时,项目文件还保存了项目的编译设置等信息,如调试版(debug)和发布版(release)。
另外,根据项目类型的不同,一个项目包含有不同的源文件、资源文件和其他类别的文件。
(2)解释项目工作区中各个视图的功能。
ClassView用于显示项目中定义的类;
ResourceView用于显示项目中所包含的资源文件;
FileView用于显示所创建的项目。
(3)WizardBar工具栏的作用是什么?
WizardBar工具栏可以对ClassView和ClassWizard中的命令进行快速访问,使类和成员函数的操作更加方便,WizardBar会自动跟踪用户程序的上下文。
(4)简述向项目添加一个资源的方法。
用户可以通过在Insert菜单中选择Resource菜单项来创建新的资源。
单击Resource菜单项,弹出InsertResource对话框。
首先在对话框的左侧选择资源类型,然后根据具体情况,单击右侧的不同按钮。
若资源需要临时创建,则单击New按钮,在打开的相应资源编辑器中创建资源。
若资源文件已经存在,则单击Import按钮,在ImportResource对话框中选择资源文件,然后单击Import按钮。
2.5习题
1.填空题
(1)MFC的全称是MicrosoftFoundationClass。
(2)Windows是一个基于事件的消息驱动系统。
(3)句柄是Windows使用的一种无重复整数,主要用来标识应用程序中的一个对象。
(4)利用MFCAppWizard[exe]可以创建三种类型的应用程序,即单文档、多文档和基于对话框的应用程序。
(5)一个单文档的MFC应用程序框架一般包括5个类,它们分别是应用程序类、框架窗口类、视图类、文档类和文档模板类。
(6)Windows消息主要有3种类型,即标准Windows消息、控件消息和命令消息。
(7)MFC采用消息映射来处理消息。
(8)CWinApp提供4个成员函数来实现传统SDK应用程序WinMain()函数完成的工作。
2.选择题
(1)Windows应用程序是按照()非顺序的机制运行的。
A.事件→消息→处理
B.消息→事件→处理
C.事件→处理→消息
D.以上都不对
(2)下面()不是MFC应用程序外观的选项。
A.DockingtoolbarB.Context-sensitiveHelp
C.ActiveXControlsD.Printingandprintpreview
(3)对MFC类的下列描述中,()是错误的。
A.应用程序类CWinApp是CWinThread的子类
B.窗口类CWnd提供了MFC中所有窗口类的基本功能
C.CView是CWnd类的子类
D.CDocTemplate类是Template类的子类
(4)下列()不是MFC消息映射机制有关的宏。
A.DECLARE_MESSAGE_MAP()宏
B.BEGIN_MESSAGE_MAP()宏
C.DECLARE_SERIAL()宏
D.END_MESSAGE_MAP()宏
3.判断题
(1)窗口是Windows应用程序的基本操作单元,是应用程序与用户之间交互的接口环境,也是系统管理应用程序的基本单位。
(t)
(2)所有的Windows应用程序都是消息驱动的。
(t)
(3)所有的Windows应用程序都是用MFCAppWizard[exe]向导创建的。
(f)
(4)使用MFCAppWizard[exe]向导创建应用程序框架时,向导生成的文件名和类名是不可更改的。
(f)
(5)消息映射是将消息处理函数与它要处理的特定消息连接起来的一种机制。
(t)
(6)命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。
(t)
(7)利用MFC编程时,所有的消息与消息处理函数的添加都必须采用ClassWizard类向导来完成。
(8)WinMain函数是所有Windows应用程序的入口。
(9)用快捷键F9既可设置断点,又可取消断点。
(10)调式程序时,会同时出现Variable窗口和Watch窗口。
(t)
4.简答题
(1)简述MFC应用程序的执行过程。
MFC应用程序启动时,首先创建应用程序对象theApp。
这时将自动调用应用程序类的构造函数初始化对象theApp,然后由应用程序框架调用MFC提供的WinMain()主函数。
在WinMain()主函数中,首先通过调用全局函数GetApp()来获取theApp的指针pApp,然后通过该指针调用theApp的成员函数InitInstance()来初始化应用程序。
在应用程序的初始化过程中,同时还构造了文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。
当InitInstance()函数执行完毕后,WinMain()函数将调用成员函数Run(),进入消息处理循环,直到函数Run()收到WM_QUIT消息。
MFC首先调用CWinApp类的成员函数ExitInstance(),然后调用静态对象的析构函数,包括CWinApp对象,最后退出应用程序,将控制权交给操作系统。
在初始化的最后,应用程序将收到WM_PAINT消息,框架会自动调用视图类的OnDraw()函数绘制程序客户区窗口。
这时,应用程序的基本窗口已经生成,应用程序准备接收系统或用户的消息,以便完成用户需要的功能。
如果消息队列中有消息且不是WM_QUIT消息,则将消息分发给窗口函数,以便通过MFC消息映射宏调用指定对象的消息处理函数。
如果消息队列中没有消息,函数Run()就调用函数OnIdle()进行空闲时间的处理。
(2)简述文档/视图与其他类对象的关系。
在MFC应用程序中,文档类和视图类是用户最常用的两个类,它们之间是密切相关的。
文档/视图体系结构是MFC应用程序框架结构的基石,它定义了一种程序结构,这种结构利用文档对象保存应用程序的数据,依靠视图对象控制视图显示数据,文档与视图的关系是一对多的关系,也就是说,文档中的数据可以以不同的方式显示。
MFC在类CDocument和CView中为文档和视图提供了基础结构。
CWinApp、CFrameWnd和其他类与CDocument和CView共同把所有的程序片段连在一起。
文档/视图与其他类对象的关系如下图所示。
(3)简述MFC消息映射机制。
MFC采用消息映射来处理消息。
这种消息映射机制包括一组消息映射宏,用于把一个Windows消息和其消息处理函数联系起来。
MFC应用程序框架提供了消息映射功能,所有从CCmdTarget类派生出来的类都能够拥有自己的消息映射。
(4)消息WM_LBUTTONDOWN的消息映射宏和消息处理函数是什么?
消息WM_LBUTTONDOWN的消息映射宏是ON_WM_LBUTTONDOWN(),消息处理函数是OnRButtonDown()。
(5)如何自定义消息?
如何发送自定义消息?
Windows将所有的消息值分为4段:
0x0000~0x03FF消息值范围段用于Windows系统消息,0x0400~0x7FFF段用于用户自定义的窗口消息,0x8000~0xBFFF段为Windows保留值,0xC000~0xFFFF段用于应用程序的字符串消息。
常量WM_USER(为0x0400)与第一个自定义消息值相对应,用户必须为自己的消息定义相对于WM_USER的偏移值,利用#define语句直接定义自己的消息,如下所示:
#defineWM_USERWM_USER+3;
//自定义消息WM_USER
也可以调用窗口消息注册函数RegisterWindowMessage()来定义一个Windows消息,由系统分配消息一个整数值。
该函数原型为:
UINTRegisterWindowMessage(LPCTSTRlpString);
其中参数lpString是要定义的消息名,调用成功后将返回该消息的ID值。
发送自定义消息消息采用的函数是SendMessage()函数。
(文中未讲清楚)
3.7习题
1.填空题
(1)Windows引入GDI的主要目的是为了实现设备无关性。
(2)与DOS字符方式下的输出文本不同,Windows是按图形方式输出的。
(3)为了体现Windows的设备无关性,应用程序的输出面向一个称之为设备环境的虚拟逻辑设备。
(4)在一个MFC应用程序中获得DC的方法主要有两种:
一种是接受一个参数为指向CDC对象的指针;
另一种是声明一个MFC设备环境类的对象,并使用this指针为该对象赋值。
(5)Windows用COLORREF类型的数据存放颜色,它实际上是一个32位整数。
它采用3个参数表示红、绿、蓝分量值,这3个值的取值范围为0~255。
(6)库存对象是由操作系统维护的用于绘制屏幕的常用对象,包括库存画笔、画刷、字体等。
(7)可以利用CGdiObject类的成员函数CreateStockObject()将GDI对象设置成指定的库存对象。
(8)创建画笔后必须调用CDC类的成员函数SelectOject()将创建的画笔选入当前设备环境。
(9)在默认情况下输出文本时,字体颜色是黑色,背景颜色是白色,背景模式为不透明模式。
(10)创建画笔的方法有两种,一种是定义画笔对象时直接创建,另一种是先定义一个没有初始化的画笔对象,再调用CreatePen()函数创建指定画笔。
2.选择题
(1)下面()不是MFC设备环境类CDC类的派生类。
A.GDI类B.CPaintDC类C.CClientDC类D.CWindowDC类
(2)下面()不是GDI对象。
A.CFont类B.CPalette类C.CClientDC类D.CBitmap类
(3)下列描述中,()是错误的。
A.CreatePointFont()是CFont类提供的创建函数
B.可使用SetTextAlign()函数改变文本对齐方式
C.使用函数GetTextMetrics()可以获得所选字体中指定字符串的宽度和高度
D.可使用DrawText()函数在给定的矩形区域内输出文本
(4)下列()不是MFCCDC类中常用的文本输出函数。
A.TextOut()B.DrawText()C.ExtTextOut()D.ExtDrawText()
3.判断题
(1)CDC类是MFC设备环境类的基类。
(t)
(2)CClientDC代表整个窗口的设备环境。
(f)
(3)CPen和CFont均是GDI对象。
(t)
(4)深绿色RGB值为(0,128,0)(t)
(5)删除CPen对象可调用CPen对象的DeleteObject()函数。
(6)创建阴影画刷函数是CreateHatchBrush()。
(t)
(7)默认的对齐方式是TA_LEFT|TA_BOTTOM。
(8)DDB又称GDI位图,它依赖于具体设备,只能存在于内存中。
4.简答题
(1)GDI创建哪几种类型的图形输出?
应用程序可以使用GDI创建3种类型的图形输出:
矢量图形、光栅图形和文本。
(2)什么是设备环境?
它的主要功能有哪些?
设备环境DC也称设备描述表或设备上下文。
设备环境DC是由GDI创建、用来代表设备连接的数据结构。
DC的主要功能有以下几种:
●允许应用程序使用一个输出设备。
●提供Windows应用程序、设备驱动和输出设备之间的连接。
●保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。
●保存窗口剪切区域(ClippingRegion),限制程序输出到输出设备中窗口覆盖的区域。
(3)什么是GDI,它有什么功能?
MFC将GDI函数封装在哪个类中?
GDI是Windows提供了一个图形设备接口的抽象接口。
GDI负责管理用户绘图操作时功能的转换,其主要功能是实现设备无关性。
MFC将GDI函数封装在CDC类中。
(4)请叙述设备无关性的含义,实现设备无关性需要哪几个环节?
所谓设备无关性,是指操作系统屏蔽了硬件设备的差异,使用户编程时一般无须考虑设备的类型,如不同种类的显示器或打印机。
当然,实现设备无关性的另一个重要环节是设备驱动程序。
不同设备根据其自身不同的特点(如分辨率和色彩数目)提供相应的驱动程序。
下图描述了Windows应用程序的绘图过程。
(5)MFC提供了哪几种设备环境类?
它们各自有什么用途?
MFC提供的设备环境类包括CDC、CPaintDC、CClientDC、CWindowDC和CMetaFileDC等,其中CDC类是MFC设备环境类的基类,其他MFC设备环境类都是CDC类的派生类,各个设备环境类的功能如下表所示。
设备环境类
功能描述
CDC
所有设备环境类的基类,对GDI的所有绘图函数进行了封装;
可用来直接访问整个显示器或非显示设备(如打印机等)的上下文
CPaintDC
CPaintDC用于响应窗口重绘消息(WM_PAINT)的绘图输出,不仅可对客户区进行操作,还可以对非客户区进行操作
CClientDC
代表窗口客户区的设备环境,一般在响应非窗口消息并对客户区绘图时要用到
该类
CWindowDC
代表整个窗口的设备环境,包括客户区和非客户区;
除非要自己绘制窗口边框和按钮,否则一般不用它
CMetaFileDC
代表Windows图元文件的设备环境;
一个Windows图元文件包括一系列的图形设备接口命令,可以通过重放这些命令来创建图形;
对CMetaFileDC对象进行的各种绘制操作可以被记录到一个图元文件中
(6)简述传统的SDK获取设备环境的方法。
传统的SDK获取设备环境的方法有两种。
在WM_PAINT消息处理函数中通过调用API函数BeginPaint()获取设备环境,在消息处理函数返回前调用API函数EndPaint()释放设备环境。
如果绘图操作不是在WM_PAINT消息处理函数中,需要通过调用API函数GetDC()获取设备环境,调用API函数ReleaseDC()释放设备环境。
(7)简述创建和使用自定义画笔的步骤。
如果要在设备环境中使用自己的画笔绘图,首先需要创建一个指定风格的画笔,然后选择所创建的画笔,最后还原画笔。
(8)简述采用MFC方法编程时,显示一个DDB位图的步骤。
采用MFC方法编程时,显示一个DDB位图需要执行以下几个步骤。
●声明一个CBitmap类的对象,使用LoadBitmap()函数将位图装入内存。
●声明一个CDC类的对象,使用CreateCompatibleDC()函数创建一个与显示设备环境兼容的内存设备环境。
●使用CDC:
:
SelectObject()函数将位图对象选入设备环境中,并保存原来设备环境的指针。
●利用CDC的相关输出函数输出位图。
SelectObject()函数恢复原来设备环境。
4.6习题
(1)常见的菜单类型有主菜单、弹出菜单和快捷菜单3种。
(2)在VisualC++中,每一个快捷键除了ID属性外,还有两个属性:
键和
类型。
(3)基于对话框的应用程序在运行时没有菜单栏。
(4)在MFC中,工具栏的功能由类CToolBar实现。
(5)调用CToolBar类的成员函数CToolBar:
Create()或CreateEx()创建并初始化工具栏窗口对象。
(6)设置工具栏停靠特性,需要调用EnableDocking()函数。
(7)状态栏实际上是一个窗口,一般分为几个窗格,用来显示不同的信息。
(8)在MFC中,状态栏的功能由CStatusBar类实现。
(9)状态栏显示的内容由数组indicators决定,需要在状态栏中显示各窗格的标识符、位置以及个数。
(10)CStatusBar类的成员函数SetPaneInfo()用来设置给定索引值的窗格ID、风格和宽度,成员函数SetPaneText()用来更新窗格的文本
(1)在编辑某菜单项时,若要指明该菜单项是一个弹出式子菜单,必须选择属性对话框中的()。
A.SeparatorB.Pop-upC.InactiveD.Grayed
(2)要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示,必须设置工具栏的风格为()。
A.CBRS_TOOLTIPSB.CBRS_FLYBY
C.CBRS_NOALIGND.WS_VISIBLE
(3)MFC应用程序框架为状态栏定义的静态数组indicators放在文件()中。
A.MainFrm.cppB.MainFrm.hC.stdAfx.cppD.stdAfx.h
(4)下列有关菜单的叙述中不确的是()。
A.“&
”字符的作用是使其后的字符加上下划线
B.“\t”转移字符表示使快捷键按右对齐显示
C.自定义菜单项ID不能与系统菜单项ID相同
D.选中菜单项属性对话框中的Separator,指明菜单项是一个水平线分隔条
(1)给菜单项定义快捷键,只需在菜单项属性设置对话框的Caption文本框中说明
即可。
(f)
(2)弹出快捷菜单一般出现在鼠标箭头的位置。
(t)
(3)UPDATE_COMMAND是更新命令用户接口消息。
(4)工具栏停靠特性只能设置一次。
(t)
(5)状态栏的功能由CStatusBar类实现。
(t)
(6)CMenu类、CToolBar类和CStatusBar类的根基类是相同的。
(1)简述菜单设计的主要步骤。
菜单设计一般需要经过下面两步:
●使用菜单编辑器编辑菜单资源;
●使用ClassWizard进行消息映射,编辑成员函数,完成菜单所要实现的功能。
(2)为应用程序创建快捷菜单主要有哪些方法?
为应用程序创建快捷菜单主要有以下两种方法:
●使用ComponentGallery创建快捷菜单
●使用TrackPopupMenu()函数创建快捷菜单
(3)如何动态创建菜单?
动态创建菜单分为以下3个步骤。
●利用CreateMenu()函数创建一个空的弹出式菜单
●调用AppendMenu()或InsertMenu()函数在菜单中加入菜单项
●调用函数SetMenu()加载动态菜单
(4)创建工具栏的基本步骤有哪些?
创建工具栏的基本步骤是:
●创建工具栏资源;
●构建一个CToolBar对象;
●调用CToolBar:
Create()或CreateEx()函数创建工具栏窗口;
LoadToolBar()载入工具栏资源。
(5)简述MFC创建状态栏所做的工作。
首先构造一个CToolBar类的对象,然后调用CToolBar:
Create()或CreateEx()函数创建工具栏窗口,最后调用CToolBar:
LoadToolBar()函数载入工具栏资源。
5.7习题
(1)对话框的主要功能是输出信息和接收用户的输入。
(2)从对话框的工作方式看,对话框可分为模态对话框和非模态对话框两种类型。
(3)对话框主要由对话框模板资源与对话框类两部分组成。
(4)使用DoModal()函数可以创建模式对话框,使用Create()函数可以创建非模式对
话框。
(5)为了支持属性页对话框,MFC提供了CPropertySheet类和CPropertyPage类。
(1)对话框的功能被封装在()类中。
A.CWndB.CDialogC.CObjectD.CCmdTarget
(2)()是非模式对话框。
A.“查找”对话框B.“字体”对话框C.“段