您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > MFC纯复习题200504
实用软件技术复习题1在用API编写Windows程序时,要有一个入口函数,它的函数名和功能是什么?答:在Windows编程中这个入口函数就是WinMain()。WinMain函数主要用于初始化程序,显示主窗口,并进入一个消息循环。2在Windows程序的入口函数WinMain()中有一个消息循环,代码如下:while(GetMessage(&msg)){TranslateMessage(&msg);DispatchMessage(&msg);}上述代码中个函数作用是什么?答:通过GetMessage函数从线程的消息队列中取出消息,用TranslateMessage函数将消息解释后,再调用DispatchMessage将该消息分发至相应的窗口过程(WndProc)进行处理。3Windows程序中有一个窗口函数,该函数的作用是什么?答:每一个窗口都应该有一个“窗口函数”(windowprocedure,或称windowfunction)。如果窗口获得一个消息,则这个窗口函数必须判断消息的类别,决定处理的方式。4在Windows系统中分别定义了两个数据类型用来表示应用程序对象的句柄及窗口对象的句柄,这两个数据类型是什么?答:应用程序:数据类型HINSTANCE,也常把HINSTANCE的变量命名为hInstance,窗口:数据类型为HWND(也写成HWindow或HWND)。5利用AppWizard生成的多文档应用程序包括哪几个主要的类?答:主要是CWinApp,CDocument,CView,CFrameWnd派生,另外再加上CDocTemplate,这5个类构成了大部分MFC应用程序的核心,6MFC类库可分为哪两部分?答:MFC类库可以分为两部分,一部分是MFC类,另一部分是全局函数(变量)和宏。7MFC中下列类的类名分别是什么?应用程序类(CWinApp)、视图类(CView)、文档类(CDocument)、窗口类(CWnd)、主框架窗口类(CFrameWnd)、文档模板类(CDocTemplate)、对话框类(CDialog)、异常类(CException)、字符串类(CString)、菜单类(CMenu)、工具栏类(CToolBar)、状态栏类(CStatusBar)、静态控件类(CStatic)、按钮控件类(CButton)、编辑控件类(CEdit)、列表框控件类(CCListBox)、组合框控件类(CComboBox)、滚动条控件类(CScrollBar)。8Windows系统的消息主要分为哪几大类?并写出几个常用的消息及其消息处理函数。答:1.标准的Windows消息以WM_为前缀,除了WM_COMMAND消息,(1)键盘消息一类是系统键(systemkey),另一类则是非系统键。WM_CHAR也称为键盘消息,该消息的处理函数为OnChar()。此外还有两个常用的键盘消息:WM_KEYDOWN按下非系统键和WM_KEYUP.释放非系统键(2)鼠标消息①#defineWM_MOUSEMOVE0x0200//鼠标移动消息(3)与窗口操作有关的两个重要消息★WM_CREATE消息创建一个窗口时,会产生WM_CREATE消息,处理函数为:afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct)★WM_PAINT消息重画当前窗口时,会发出WM_PAINT消息。处理函数为:OnPaint()。2.控件通知消息1)文本编辑框控件消息2)按扭控件消息3)列表框控件消息4)组合框控件消息5)滚动栏控件消息6)默认下压式按扭消息3.命令消息处理函数为:OnCommand()。4定时消息如SetTimer(ID_TIMER,1000,NULL);//该定时器ID,时间间隔,调用函数5用户自定义消息消息处理函数原型前面都有关键字afx_msg前缀,用于把消息处理函数与其它函数区分开来。9在MFC程序设计中,什么是消息映射?哪些类可以有消息映射?答:所谓消息映射,就是将消息与其处理函数相对应,即当系统产生一条消息时,它能够找到处理该消息的函数。在MFC中,凡是从CCmdTarget(命令发送类)派生的类都可以有消息映射。10MFC中有哪些常用的消息映射宏,它们各有什么作用?答:三种:DECLARE_MESSAGE_MAP、BEGIN_MESSAGE_MAP和END_MESSAGE_MAP。DECLARE_MESSAGE_MAP用于类申明的末尾,即在.h文件中;在实现文件(.cpp)中,使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP来完成消息映射的任务。DECLARE_MESSAGE_MAP:用于声明在源文件中存在消息映射。BEGIN_MESSAGE_MAP:用于标志消息映射的开始,END_MESSAGE_MAP:标志消息映射的结束。11AppWizard及ClassWizard各有什么功能?答:与AppWizard类似,ClassWizard也能自动生成程序代码,只是两者生成的对象不同,AppWizard主要用来创建应用程序的框架,而ClassWizard则主要是在应用程序框架的基础上创建和编辑各种类。ClassWizard既可以操作由AppWizard在应用程序框家中创建的类,又可以操作后来由ClassWizard自己添加的类。利用ClassWizard可以很轻松地完成一些最基本、最普通的工作,如在自己的应用程序中创建新类、映射消息为其添加消息处理函数、覆盖虚拟函数、将对话框中的控件与某个变量相关联等。12如何应用ClassWizard创建一个新类?要求写出主要步骤。答:只需指定一些关于新类的重要信息,ClassWizard将自动为你生成代码。步骤如下:(1)首先打开FirstApp的项目工作区。(2)点击菜单项View|ClassWizard,进入ClassWizard对话框。(3)在MessageMaps选项卡中选择功能按钮AddClass,并从其下拉选项栏中单击New选项,将会打开NewClass对话框。(4)首先在Name栏中键入新类的名称,如FirstButton。(5)接下来应当设定新类的基类,即该类是由什么类派生而来的。(6)如果创建的基类需要对话框或其它资源,则在DialogID框中选择一个资源ID值。(7)Automation组框用于设置类的自动化信息,这只适用于能够自动化的类,即由CCmdTarget所派生的类,我们保持其默认选择None。(8)最后单击OK按钮结束。13如何应用ClassWizard为视图类的WM_LBUTTONDOWN消息添加一个消息处理函数?假定项目工程的名称为FirstApp,要求写出主要步骤。答:以FirstApp应用程序为例来添加消息处理函数,处理用户在视图中的单击鼠标操作。步骤如下:(1)首先打开FirstApp的项目工作区。(2)点击菜单项View|ClassWizard,进入ClassWizard对话框。(3)选择MessageMaps选项卡,在Project下拉列表框中选择项目名FirstApp,在Classname下拉列表框中选择类名CFirstAppView。(4)在ObjectIDs列表框中选择对象ID为CFirstAppView。(5)在Message列表框中选择需要处理的消息为WM_LBUTTONDOWN,即按下鼠标左键消息。(6)此时会发现AddFunction按钮已经可用。单击此按钮,ClassWizard将选中消息的处理函数添加到MemberFunctions列表框中。在本例中,对应WM_LBUTTONDOWN消息的处理函数是OnLButtonDown()。(7)最后单击OK按钮结束。14ClassWizard的MessageMaps选项卡的ObjectIds列表框中显示什么信息?答:ObjectIDs列表框:显示当前选定类中能够产生消息的对象的ID值。这些对象包括菜单选项、工具栏按钮选项、对话框以及各种控件等。15ClassWizard的MessageMaps选项卡的Messages列表框中显示什么信息?答:Message列表框:当ObjectIDs列表框中选定当前类名时,Message列表框前部分显示的是当前类所能覆盖的虚拟函数,后部分显示的是能够处理的消息。16在文档视图结构中,文档类与视图类各有什么作用?答:文档类用于管理应用程序中的各种数据,在MFC应用程序中,文档用于管理、保存应用程序中的各种数据,视图的主要作用是显示文档数据、接收用户的输入并将其解释为对文档的操作。17在文档视图结构中,视图类通过什么途径访问和操作文档类的数据?答:视图通过使用视图中指向文档的指针来访问文档对象。在使用MFC应用程序向导创建的程序中,这个指针被直接放在视图类的数据成员中。用户可以调用CView类的成员函数GetDocument()在视图的成员函数中检索该指针,获取指针后才可以使用指针访问文档类的数据。18文档类中的成员函数UpdateAllViews()有什么作用?答:UpdateAllViews()函数用于通知所有视图它的文档已经被更改。19文档类中创建一个新文档时,将调用什么成员函数?文档数据的初始化在哪个成员函数里实现。答:创建一个新文档时,将调用OnNewDocument()函数。它先调用DeleteContents()函数把文档内容清除掉此外,OnNewDocument()还会将文件名清除,改用缺省文件名,并且调用SetModifiedFlag()函数将“修改标志”设成FALSE。调用这个函数重新初始化已经存在的文档。20文档类中打开一个已存在的文档、设置文档修改标志、保存一个已存在的文档、关闭一个文档时时,各调用什么成员函数?答:使用OnOpenDocument()函数打开指定的文件时,通常先调用DeleteContents()函数来确保文档已经被清空(动态销毁分配的数据),并调用Serialize()函数读取文档内容。voidCDocument::SetModifiedFlag(BOOLbModified=TRUE);通常在存档时程序会调用IsModified()检查修改标志,如果“修改标志”的状态为FALSE,表示文档没有被修改过,因此可以考虑不做实际存档操作。储存文档有两种方式,第一种是“Save”,第二种是“SaveAs”。两者的差异在于后者会查询文件名,但最终两者都会跳到OnSaveDocument()进行实质的存档操作,该函数唯一的参数就是文档的文件名。函数原型如下:virtualBOOLCDocument::OnSaveDocument(LPCTSTRlpszPathName);当关闭一个打开的文档时,将调用OnCloseDocument()函数。21MFC编程时采用串行化方法加载和保存文档中的数据成员,这通过调用serialize()函数实现,serialize()函数的结构如下:voidCFirstAppDoc::Serialize(CArchive&ar){if(ar.IsStoring()){//TODO:addstoringcodehere}else{//TODO:addloadingcodehere}}请问储存数据及读取数据的代码应当分别将放到哪一语句块?答:当我们需要修改Serialize函数以满足应用程序的需要时,应该将写文档数据(输出)的代码放在if程序段中,而将读取文档数据(输入)的代码放在else程序段中。22在视图类中,当需要绘制或重绘视图窗口时将调用哪个成员函数?答:virtualvoidCView::OnDraw(CDC*pDC);当需要绘制或重绘视图窗口时会调用此函数,此外打印以及打印预览时也会调用OnDraw()。23在视图类中的成员函数OnUpdate()有什么作用?答:OnUpdate()收到Document的消息之后会调用Invalidate(),重绘整个View。当CDocument的UpdateAllViews()函数被调用时
本文标题:MFC纯复习题200504
链接地址:https://www.777doc.com/doc-2888646 .html