visualc++程序设计与应用教程课后答案.docx
《visualc++程序设计与应用教程课后答案.docx》由会员分享,可在线阅读,更多相关《visualc++程序设计与应用教程课后答案.docx(24页珍藏版)》请在冰豆网上搜索。
visualc++程序设计与应用教程课后答案
习题
1.填空题
(1)项目工作区一般在集成开发环境的左侧。
它展示一个项目的几个方面,它们分别是ClassView、ResourceView和FileView。
(2)编译程序的快捷键是Ctrl+F7,链接程序的快捷键是F7,运行程序的快捷键是Ctrl+F5。
(3)项目工作区文件的扩展名为.dsw。
(4)应用程序向导AppWizard的作用是帮助用户一步步生成一个新的应用程序,并且自动生成应用程序所需的基本代码。
通过ClassWizard可以增加消息映射和成员变量。
(5)菜单选择可以通过两种方法来进行:
一种是鼠标操作;另一种是键盘操作。
(6)编译微型条工具栏最右边按钮的功能是Insert/RemoveBreakpoint。
(7)快捷键或菜单及相关资源的资源符号的前缀是IDR_。
(8)用户可以通过项目工作区窗口的ResourceView视图来查看资源。
2.选择题
(1)项目文件的扩展名是()。
A..exeB..dspC..dswD..cpp
(2)设置断点的默认方式是()。
(第2章)
A.LocationB.DataC.MessageD.Breakpoints
(3)用应用程序向导AppWizard创建C++源文件,应选择()选项卡。
A.FilesB.ProjectsC.WorkspacesD.OtherDocuments
(4)Standard工具栏中最左边按钮与()菜单命令的功能一样。
A.NewB.NewFileC.NewTextFileD.NewWorkspace
(5)Windows资源提供的资源编辑器不能编辑()。
A.菜单B.工具栏C.状态栏D.位图
3.判断题
(1)打开一个项目,只需打开对应的项目工作区文件。
(T)
(2)用户可以通过Tools|Customize菜单命令设置集成开发环境的工具栏。
(T)
(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按钮。
习题
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类向导来完成。
(f)
(8)WinMain函数是所有Windows应用程序的入口。
(t)
(9)用快捷键F9既可设置断点,又可取消断点。
(t)
(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;
填空题
(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()用来更新窗格的文本
2.选择题
(1)在编辑某菜单项时,若要指明该菜单项是一个弹出式子菜单,必须选择属性对话框中的()。
A.SeparatorB.Pop-upC.InactiveD.Grayed
(2)要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示,必须设置工具栏的风格为()。
A.CBRS_TOOLTIPSB.CBRS_FLYBY
C.CBRS_NOALIGND.WS_VISIBLE
(3)MFC应用程序框架为状态栏定义的静态数组indicators放在文件()中。
A.B.C.D.
(4)下列有关菜单的叙述中不确的是()。
A.“&”字符的作用是使其后的字符加上下划线
B.“\t”转移字符表示使快捷键按右对齐显示
C.自定义菜单项ID不能与系统菜单项ID相同
D.选中菜单项属性对话框中的Separator,指明菜单项是一个水平线分隔条
3.判断题
(1)给菜单项定义快捷键,只需在菜单项属性设置对话框的Caption文本框中说明
即可。
(f)
(2)弹出快捷菜单一般出现在鼠标箭头的位置。
(t)
(3)UPDATE_COMMAND是更新命令用户接口消息。
(t)
(4)工具栏停靠特性只能设置一次。
(t)
(5)状态栏的功能由CStatusBar类实现。
(t)
(6)CMenu类、CToolBar类和CStatusBar类的根基类是相同的。
(t)
4.简答题
(1)简述菜单设计的主要步骤。
菜单设计一般需要经过下面两步:
使用菜单编辑器编辑菜单资源;
使用ClassWizard进行消息映射,编辑成员函数,完成菜单所要实现的功能。
(2)为应用程序创建快捷菜单主要有哪些方法?
为应用程序创建快捷菜单主要有以下两种方法:
使用ComponentGallery创建快捷菜单
使用TrackPopupMenu()函数创建快捷菜单
(3)如何动态创建菜单?
动态创建菜单分为以下3个步骤。
利用CreateMenu()函数创建一个空的弹出式菜单
调用AppendMenu()或InsertMenu()函数在菜单中加入菜单项
调用函数SetMenu()加载动态菜单
(4)创建工具栏的基本步骤有哪些?
创建工具栏的基本步骤是:
创建工具栏资源;
构建一个CToolBar对象;
调用CToolBar:
:
Create()或CreateEx()函数创建工具栏窗口;
调用CToolBar:
:
LoadToolBar()载入工具栏资源。
(5)简述MFC创建状态栏所做的工作。
首先构造一个CToolBar类的对象,然后调用CToolBar:
:
Create()或CreateEx()函数创建工具栏窗口,最后调用CToolBar:
:
LoadToolBar()函数载入工具栏资源。
习题
1.填空题
(1)对话框的主要功能是输出信息和接收用户的输入。
(2)从对话框的工作方式看,对话框可分为模态对话框和非模态对话框两种类型。
(3)对话框主要由对话框模板资源与对话框类两部分组成。
(4)使用DoModal()函数可以创建模式对话框,使用Create()函数可以创建非模式对
话框。
(5)为了支持属性页对话框,MFC提供了CPropertySheet类和CPropertyPage类。
2.选择题
(1)对话框的功能被封装在()类中。
A.CWndB.CDialogC.CObjectD.CCmdTarget
(2)()是非模式对话框。
A.“查找”对话框B.“字体”对话框C.“段落”对话框D.“颜色”对话框
(3)要将模式对话框在屏幕上显示需要用到函数()。
A.CreateB.DoModalC.OnOKD.构造函数
(4)通常将对话框的初始化工作在()函数中进行。
A.OnOKB.OnCancelC.OnInitDialogD.DoModal
(5)使用()通用对话框类可以打开文件。
A.CFileDialogB.CColorDialogC.CPrintDialogD.CFontDialog
3.简答题
(1)简述创建和使用模态对话框的主要步骤。
使用对话框编辑器来创建包含不同控件的对话框模板资源
从MFC的CDialog中派生出一个类,用来负责对话框行为。
利用ClassWizard把这个类和先前你产生的对话框资源连接起来。
对话框的初始化。
创建一个对话框对象,调用CDialog:
:
DoModal()函数打开对话框。
(2)如何向对话框模板资源添加控件?
如何添加与控件关联的成员变量?
在一个对话框资源中增加控件的操作十分方便,只需从控件工具栏中选中要增加的控件,再将此控件拖动至对话框模板中的确定位置上,松开鼠标按键即添加了一个控件。
调整控件的位置和大小的操作与Word中对文本框的操作完全一样。
可以利用ClassWizard类向导的MemberVariables页面为对话框类添加与对话框控件关联的成员变量。
在MemberVariables页面中,双击一个ID或选定ID后,单击AddVariable按钮,将弹出AddMemberVariable对话框。
在Membervariablename框用于输入成员变量名,在Category下拉框选择成员变量的类别。
(3)什么是DDX和DDV?
编程时如何使用MFC提供的DDX功能?
DDX为对话框数据交换,它用于将成员变量与对话框控件相连接,完成数据在成员变量和控件之间的交换。
DDV为对话框数据验证,它能自动校验输入的数据是否符合设计要求。
我们只需通过ClassWizard为对话框类添加与对话框控件关联的成员变量即可使用MFC提供的DDX功能。
(4)简述创建属性页对话框的主要步骤。
设计对话框资源。
分别为各个页创建对话框模板,每页的模板最好具有相同尺寸,如果尺寸不统一,则框架将根据尺寸最大的页来确定属性页对话框的大小。
用ClassWizard为每页创建新类,并加入与控件对应的成员变量。
打开属性页对话框
习题
1.填空题
(1)Windows系统提供的标准控件主要包括静态控件、编辑框、按钮、列表框、组合框和滚动条等。
(2)Windows标准控件的属性设置通常由General、Style及ExtendStyles三个属性页构成。
(3)当编辑框中的文本已被修改,在新的文本显示之后发送EN_CHANGE通知消息。
(4)CButton类控件包括按键按钮、单选按钮、复选框和组框等4种类型。
(5)一组单选按钮在对话框类中只能映射一个int类型值变量,对应单选按钮在组中的序号,序号从0开始。
(6)向列表框增加列表项使用CListBox类成员函数AddString或InsertString。
(7)组合框是多个控件的组合,包括编辑框、列表框和按钮。
(8)—个旋转按钮控件通常是与一个相伴的控件一起使用的,这个控件称为“伙伴窗口”。
该控件的Tab键次序必须小于旋转按钮。
(9)当滑块滑动时,滑块控件将发送滚动消息来通知父窗口。
垂直滑块发送WM_VSCROLL消息,水平滑块发送WM_HSCROLL消息。
(10)MFC的CProgressCtrl类封装了进度条控件的各种操作,该类的成员函数SetRange()用来设置进度条的范围。
2.简答题
(1)在应用程序中访问控件的方法有哪些?
应用程序访问控件一般有3种方法:
利用对话框的数据交换功能访问控件
通过控件对象来访问控件
利用CWnd类的一些用于管理控件的成员函数来访问控件
(2)单选按钮控件如何成组?
将一组单选按钮放在一个组框控件中,并为同组中的第一个单选按钮设置Group属性。
(3)组合框与列表框相比有什么不同?
如何给组合框添加初始的列表项?
列表框可列出各种可能的选项,但用户却不能在列表框中输入新的列表项。
而组合框不仅可以显示列表项供用户进行选择,而且允许用户输入新的列表项。
可以通过组合框控件属性对话框的Data选项卡添加初始的列表项。
习题
1.填空题
(1)在文档/视图结构中,文档是用来管理和组织数据的,视图的作用是显示和编辑文档数据。
文档与视图的关系是一对多的关系。
(2)在文档/视图应用程序中,文档模板负责创建文档/视图结构,而应用程序对象管理文档模板,可以在应用程序的InitInstance()函数中创建一个和多个文档模板。
(3)在通常情况下,视图派生类的成员函数中通过调用GetDocument()函数得到当前文档对象的指针。
(4)文档类的数据成员初始化和文档的清理工作分别在OnNewDocument()成员函数和DeleteContents()成员函数中完成。
(5)MFC提供了两种集合类,一种是基于模板的集合类,另一种是非模板集合类。
(6)MFC应用程序通过CDocument的protected类型成员变量m_bModified的逻辑值来判断程序员是否对文档进行过修改。
程序员可以通过CDocument的SetModifiedFlag()成员函数来设置该值。
(7)MFCAppWizard在创建文档应用程序框架时已在文档类中重载了Serialize()函数,通过在该函数中添加代码可以达到实现文档序列化的目的。
(8)调用create()成员函数创建动态分割窗口,而静态分割窗口是调用CreateStatic()成员函数创建的。
2.简答题
(1)通过哪几个主要成员函数完成文档与视图之间的相互作用?
并简述这些成员函数的功能。
文档与视图的交互是通过下面几个主要的成员函数完成的:
视图类CView的成员函数GetDocument()
该函数得到与之相关联的文档对象的指针,利用这个指针就可以访问文档类及其派生类的公有数据成员和成员函数。
CDocument类的成员函数UpdateAllViews()
该函数通知与文档相关联的所有或部分试图,更新窗口内容。
视图类的成员函数OnUpdate()
当应用程序调用CDocument:
:
UpdateAllViews()函数时,实际上是调用了所有相关视图的OnUpdate()函数,以更新相关的视图。
需要时,可以直接在视图派生类的成员函数中调用该函数刷新当前视图。
另外,在初始化视图成员函数CView:
:
OnInitialUpdate()中也调用了OnUpdate()函数。
CView类的OnInitialUpdate()函数
当应用程序被启动,或用户从“文件”菜单中选择了“新建”或“打开”命令时,CView的OnInitialUpdate()函数会被调用,该函数是虚函数。
CView的OnInitialUpdate()函数除了调用OnUpdate()函数之外,不做其他任何事情。
也可以利用派生类的OnInitialUpdate()函数对视图对象进行初始化。
(2)简述文档序列化与一般文件处理的区别。
一般文件处理是通过文件句柄来实现磁盘输入和输出,一个文件句柄与一个磁盘文件相关联。
而文档序列化与一般文件处理最大的不同在于:
在序列化中,对象本身对读和写负责。
CArchive类对象并不知道也不需要知道它所读写数的内部