MFC的复习资料有试题包括答案Word文档下载推荐.docx
《MFC的复习资料有试题包括答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《MFC的复习资料有试题包括答案Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
Windows应用程序的主函数和窗口函数都是系统调用的函数,主函数是在应用程序启动时由系统首先调用的函数,而窗口函数是主函数在消息循环中获得消息并把消息派送给系统之后,由系统调用的用来处理消息的函数。
2-1在窗体类CframeWnd中需要封装哪些成员?
在窗体类CframeWnd中要封装窗口句柄、窗口类的定义、注册窗口类、创建窗口、显示更新窗口。
2-2应用程序类CwinApp应该具备那些主要功能?
创建、显示应用程序的窗口和建立消息循环。
2-3在MFC程序设计中,如果要建立拥有自己风格的主窗口,应该重写什么函数。
继承CWinAPP类并需要重写该类的成员函数InitInstaance。
3-3简述构成文档/视图结构应用程序框架的四个MFC派生类,并说出它们的功能。
假如工程名称为MyPrj则MFCAppWizard会自动创建一下四个派生类来构成应用程序的框架。
.CFrame类的派生类CMainFrame;
.CWinApp类的派生类CMyPrjApp;
.CDocument类的派生类CMyPrjDoc;
.CView类的派生类CMyPrjView。
其中,CMyPrjDoc类对象用来存储和管理应用程序中的数据;
CMainFrame对象与CMyPrjView对象构成了应用程序的界面,CMainFrame对象只是CMyPrjView对象的容器,而CMyPrjView类的对象是用来显示文档与接收用户事件的;
CMyPrjApp类的对象是应用程序的全局对象,它是应用程序中各对象的容器,负责创建应用程序界面和消息循环。
3-4在文档/视图结构的应用程序中,视图类对象是如何获取文档类对象中数据的?
是依靠视图类的成员函数GetDocument来返回文档对象指针,然后再通过该指针访问文档类的数据成员或函数成员。
3-5在MFC对程序窗口功能的划分中你受到了什么启发?
由于简单的MFC应用程序框架没有把数据的存储部分和与用户的交互部分分开,所以类违背了面向对象程序设计的“单一职责原则”,从而使窗口类笨重杂乱,没有灵活性。
而在文档/视图结构中则由于遵循了“单一职责原则”,从而使文档类和视图类既有分工又有合作,代码清晰,程序架构灵活。
3-6什么叫类信息表?
它在对象动态创建中起什么作用?
类中存放了类信息的一个CruntimeClass结构类型数据。
其中的主要容为类名称和指向对象构建函数的指针,建立该表的目的就是为了能在运行期根据类名称调用构建函数来动态创建对象。
3-7MFC所说的对象动态创建与C++中的对象动态创建有什么区别?
对象动态创建的核心是多少?
MFC所说的对象动态创建指的是在程序运行期间根据类名称创建一个对象;
而C++所说的对象动态创建是为待创建的对象动态分配存储空间。
4-1为什么要使用DC?
为了屏蔽硬件输出设备的多样性,Windows系统为程序员提供了一个可以操作这些硬件却与硬件无关的接口,于是就可以把对不同设备的操作方法统一起来。
4-3如何把绘图工具载入设备描述环境?
使用CDC的成员函数SelectObject把绘图工具载入设备描述环境。
4-4如何使用CDC类提供的绘图方法绘图?
首先使用语句CDC*pDC创建一个CDC类对象的指针,然后就可以用下面格式的语句来调用CDC类提供的各种方法了:
pDC->
方法名(参数);
5-1解释下列语句出的含义。
(1)CStrings;
(2)CStrings(“Hello,VisualC++6.0”);
(3)CStrings(‘A’,100);
(4)CStrings(buffer,100);
(5)CStrings(anotherCString)。
(1)构造一个长度为0的字符串对象。
(2)构造一个名称为s的字符串对象,并把字符串初始化为Hello,VisualC++6.0。
(3)构造一个名称为s的字符串对象,s字符串的容是100个A。
(4)构造一个名称为s的字符串对象,s字符串的容是buffer的头100个字符,再加一个NULL。
(5)构造一个名称为s的字符串对象,s字符串的容和anotherCString字符串的容相同。
5-2执行Cstrings(Cstring(“Hello,world”).Left(6)+Cstring(“VisualC++”).Right(3));
语句后,s字符串中的容是什么?
Hello,C++。
5-3现有语句Cstrings(“My,name,is,C++”);
若想将s字符串中的“,”号全部更换成“”,将如何编写语句?
s.Replace(‘,’,‘’);
TextOut(1,1,s);
5-4CString创建时只分配128B的缓冲区,如何分配更大的缓冲区?
使用GetBuffer()函数。
例如:
CStrings;
s.GetBuffer(1024);
6-2分别说明什么是SDI界面的程序和什么是MDI界面的程序?
用户使用应用程序时,如果该程序一次只能打开一个文档,那么这种程序就叫做SDI界面的程序,反之就叫做MDI界面的程序。
6-3在使用VC++提供的应用程序向导MFCAppWizard生成程序框架时,有哪几个机会允许程序员选择应用程序窗口的样式?
一是在MFCAppWizard-Step1时,选择SDI、MDI和基于对话框界面的窗口样式。
二是在MFCAppWizard-Step4中,可以确定窗口上诸如工具条、状态条、外观等一些选择。
三是在MFCAppWizard-Step4选择Advanced按钮后弹出的对话框中,选择窗口的样式。
6-5如何用MFC提供的程序设计向导实现具有可拆分窗口的界面程序?
在MFC提供的程序设计向导MFCAppWizard的第四步中,即在MFCAppWizard-Step4of6对话框中按下Advanced按钮,在随后打开的AdvancedOptions对话框中选择WindowStyles选项卡,并在该选项卡中选择Usesplitwindow复选项。
这样,由向导生成程序就会具有可拆分窗口的界面了。
6-6文档类的成员函数UpdateAllViews的作用是什么?
通知文档所对应的所有窗口同时进行重绘。
6-7为什么拆分窗口的显示更新必须要同步?
因为应用程序的所有拆分窗口显示的应该是同一个文档,所以当文档发生变化时,该文档所对应的窗口当然要同时更新显示以正确地反映文档的容。
6-8什么是无效显示区?
无效显示区一般定义为窗口用户区上的一个矩形区域,这个区域应覆盖所有因文档发生变化而需要重绘的部分。
当程序需要重新绘制一个图形时,只要重新绘制该矩形部的图形就可以了。
6-9如何提高拆分窗口同步更新的效率?
原则上,想办法只绘制无效显示区。
7-1鼠标消息分哪两类,它们之间有什么区别?
根据产生鼠标消息时鼠标光标所处的位置,鼠标消息分为:
客户区鼠标消息和非客户区鼠标消息两类。
在应用程序窗口中,用户可以绘图的部分叫做客户区或者用户区,而除此之外的区域叫非客户区。
鼠标在客户区产生的消息叫客户区鼠标消息,在非客户区产生的消息叫非客户区鼠标消息。
7-2常用的客户区鼠标消息有哪些?
WM_LBUTTONDBCLK双击鼠标左键WM_LBUTTONDOWN按下鼠标左键WM_LBUTTONUP释放鼠标左键WM_MOUSEMOVE移动鼠标WM_RBUTTONDBCLK双击鼠标右键WM_RBUTTONDOWN按下鼠标右键WM_RBUTTONUP释放鼠标右键
7-3在程序设计中,如何使用非客户区鼠标消息?
首先,在主框架窗口类的声明中手工添加非客户消息响应函数的声明,然后在主框架窗口类实现文件的消息映射表中添加消息映射,最后在主框架窗口类的实现文件中,添加鼠标响应函数并实现它。
7-4如何安全地接收应用程序窗口以外的鼠标消息?
在一般情况下,应用程序窗口是不会接收窗口之外的鼠标消息的,如果用户想接收应用程序窗口之外的鼠标信息,必须设法捕获鼠标信息。
在Windows中,声明了一个专门用来捕获鼠标消息函数CWnd*SetCapture;
该函数一旦被调用,则所有的鼠标消息都将发往应用程序的窗口中。
在捕获鼠标消息并完成了所应该做的工作之后,应用程序应该及时释放鼠标,以使鼠标可以按系统预定的正常方式发送信息,否则将使鼠标的一些正常作用失效。
释放鼠标要使用下面的这个函数:
BOOLReleaseCapture。
7-5什么样的窗口才能接收键盘消息?
在Windows中,有时会同时打开多个窗口。
在这些窗口中只有一个是活动窗口,这个窗口一般是屏幕上位置最靠前的窗口,它的特征是其标题栏被点亮的,而不是灰色的。
只有活动窗口才具有输入焦点,而Windows中规定只有具有输入焦点的窗口才能接收键盘消息,也就是说,只有活动窗口才能接收键盘消息。
7-6为什么在Windows应用程序中不直接使用键盘的扫描码,而使用与键盘无关的虚拟码?
怎样理解Windows中设备无关性这个概念,设备无关性对编写应用程序有什么作用?
键盘的扫描码是当用户直接敲击键盘上的按键时,由键盘的接口直接产生的与该键对应的一种编码。
由于市面上的键盘种类很多,所以不同类型的键盘产生的扫描码有可能是不同的,也就是说,这种扫描码是与具体的键盘相关的。
这样在编写程序时会有很大的不便。
所以在Windows编程中提出了设备无关性这个概念,它是基于通用性来设计的,基于这种方法设计出来的程序是不依赖于具体的硬件的,甚至不依赖于软件。
它不单单是针对键盘。
另外,它还应用在网络通信等方面。
因此,设备无关性为人们编写程序带来了很大的方便。
7-7键盘消息分为哪几类?
哪些键只产生按键消息,不产生字符消息?
键盘消息可以分成:
按键消息和字符消息两类。
按键消息分为系统按键消息(WM_KEYDOWN,WM_KEYUP)和非系统按键消息(WM_SYSKEYDOWN,WM_SYSKEYUP)。
字符消息也同样分为系统字符消息(WM_CHAR,WM_DEADCHAR)和非系统字符消息(WM_SYSCHAR,WM_SYSDEADCHAR)。
值得注意的是,系统按键消息只能产生系统字符消息,非系统按键消息只能产生非系统的字符消息。
在Windows中一些键是只产生按键消息而不产生字符消息的,这些键包括Shift键、Ctrl键、功能键、光标移动键、特殊字符键。
7-8在程序中如何确定窗口何时具有输入焦点,何时失去输入焦点?
当应用程序的窗口获得输入焦点时,会发出WM_SETFOCUS消息;
而当窗口失去输入焦点时,会发出WM_KILLFOCUS消息。
如果一个窗口获得了输入焦点,便可以用键盘对这个窗口进行操作。
8-1在Windows应用程序中,什么样的数据称为资源?
常用资源有哪些