还剩14页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
面向对象程序设计C++复习题
一、单选题1.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是(D)A.公有类型B.私有类型C.保护类型D.友元类型2.下列关于多态性的描述,错误的是CA.C++语言的多态性分为编译时的多态性和运行时的多态性B.编译时的多态性可通过函数重载实现C.运行时的多态性可通过模板和虚函数实现D.实现运行时多态性的机制称为动态绑定3.在C++语言中,数据封装要解决的问题是DA.数据的规范化B.便于数据转换C.避免数据丢失D.防止不同模块之间数据的非法访问4.使用private修饰的成员变量,以下说法正确的是(A)A.只能由本类中的函数使用,不能被外面的程序所访问B.可以由本类中的函数使用,也可以被外面的程序所访问C.只能由本类和派生类中的函数使用D.可以在主函数中使用5.对类的构造函数和析构函数描述正确的是(A)A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载6.下面对静态数据成员的描述中,正确的是(A)A.静态数据成员是类的所有对象共享的数据B.类的每个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用7.在VC++语言类体系中,不能被派生类继承的有(B)A.转换函数B.构造函数C.虚函数D.静态成员函数8.下面关于句柄正确的说法是(A)A.句柄是一个标识Windows资源和设备等对象的变量B.句柄是用户程序自定义的数据类型C.用户程序使用句柄时不需要定义D.句柄仅仅是一个抽象的概念,程序中不能使用句柄9.下面关于动态链接库正确的说法是(B)A.动态链接库提供的函数,在编译阶段能够连接到应用程序中B.动态链接库提供的函数,在运行阶段能够连接到应用程序中C.动态链接库本身不能单独设计、编译和调试D.动态链接库的使用使得程序缺乏灵活性10.下面关于MFC应用程序中InitInstance函数正确的说法是(D)A.该函数由用户定义B.该函数不需要用户程序覆盖C.该函数在WinMain函数内被显式调用D.通过应用程序类的全局指针自动调用11.为了在程序中显示一个模式对话框,应使用CDialgl类的成员函数(C)A.ShowWindowB.CreateC.DoModalD.InvalidateRect12.为了在程序中显示一个无模式对话框,应使用CWnd类的成员函数(A)A.ShowWindowSW_NORMALB.CreateC.DoModalD.InvalidateRect13.对于模式对话框的缺省按钮“OK(确定)”,下面哪种说法是正确的?(B)A.单击“OK”,系统认定用户在对话框中的选择或输入无效,对话框退出B.单击“OK”,系统认定用户在对话框中的选择或输入有效,对话框退出C.单击“OK”,对话框照常运行D.单击“OK”,对话框暂停运行14.设有语句inti=MessageBoxMFC对话框提问MB_YESNO|MB_ICONQUESTION;,下面哪种说法是正确的?(C)A.消息对话框有两个按钮“确定”和“取消”,单击“确定”返回IDOKB.消息对话框有一个按钮“确定”,单击“确定”返回IDOKC.消息对话框有两个按钮“是”和“否”单击“是”返回IDYESD.消息对话框有一个按钮“是”单击“是”返回IDYES15.一个无模式对话框在退出时,应写的代码是(C)A.DestroyWindow;B.deletethis;C.DestroyWindow;deletethis;D.CloseWindow;16.在编辑框内用代码实现剪贴板功能,下面哪个说法是正确的(D)A.使用UNIT类型变量访问剪贴板函数B.使用CString类型变量访问剪贴板函数C.使用int类型变量访问剪贴板函数D.使用CEdit类型变量访问剪贴板函数17.关于DDX/DDV技术,下面哪个说法是正确的(D)A.用户只能为一个控件关联一个变量B.用户可以为同一个控件关联多个变量,变量名可以相同,类型必须不同C.用户可以为同一个控件关联多个变量,类型可以相同,变量名必须不同D.用户可以为同一个控件关联多个变量,但必须保证变量名不同且类型不同18.一个Button控件同时具有OnCommand和BN_CLICKED两个消息处理函数,下面哪个说法是正确的(B)A.优先执行BN_CLICKED消息处理函数B.优先执行OnCommand消息处理函数C.同时执行D.编译错19.关于函数CListBox::GetTextintnIndexLPTSTRlpszBuffer,下面的说法哪个是正确的(C)A.取列表框中选中项的内容B.取列表框中选中项的索引C.取列表框中索引为nIndex的内容,送lpszBufferD.取列表框中内容为lpszBuffer的索引,送nIndex20.关于函数CButton::SetCheck1,下面的说法哪个是正确的(A)A.设置复选按钮为选中状态B.设置复选按钮为非选中状态C.设置复选按钮为不确定状态D.该函数不能设置复选按钮状态21.关于对话框应用程序的初始化代码,下面哪个说法是正确的(B)A.初始化代码应放在WinMain函数中B.初始化代码应放在OnInitDialog函数中C.初始化代码应放在对话框类的构造函数中D.初始化代码应放在用户自定义函数中22.关于函数CProgressCtrl::SetPosintnPos,下面的说法哪个是正确的(C)A.设置进展条的步长B.设置进展条范围的上限C.设置进展条初始位置D.返回进展条当前位置23.关于函数CListBox::GetItemDataPtrintnIndex,下面的说法哪个是正确的(A)A.取出与索引nIndex的列表项相关联数据的指针,类型为void*B.取出与索引nIndex的列表项相关联数据的指针,类型CString*C.取出与索引nIndex的列表项相关联数据的指针,类型int*D.取出索引nIndex的列表项字符串24.关于函数SetSel0-1,下面的说法哪个是正确的(C)A.在编辑框内选中第0行文本B.在编辑框内未选中任何文本C.在编辑框内选中全部文本D.参数范围错25.关于滚动条的WM_VSCROLL消息映射,下面的说法哪个是正确的(B)A.在CScrollBar类中进行B.在CDialog类中进行C.在CFrameWnd类中进行D.在CView类中进行26.关于函数CProgressCtrl::SteiIt,下面的说法哪个是正确的(A)A.使进展条前进一个步长B.使进展条后退一个步长C.设置进展条初始位置D.返回进展条当前位置27.关于函数CListBox::GetCurSel,下面的说法哪个是正确的(B)A.取列表框中选中项的内容B.取列表框中选中项的索引C.删除列表框中的选中项D.在列表框中添加一项28.关于函数UpdateData,下面哪个说法是正确的(B)A.数据从相关联的成员变量向控件传输B.数据从控件向相关联的成员变量复制C.实现不同控件之间的数据交换D.实现与不同控件相关联变量的数据交换29.关于函数CListBox::ResetContent,下面的说法哪个是正确的(D)A.更新列表框中的内容B.删除列表框中的第1项C.删除列表框中的最后1项D.删除列表框中的所有项,即清空列表框30.为使工具栏按钮与对应菜单项功能一致,下面哪个说法是正确的(B)A.工具栏按钮与对应菜单项的ID相同,工具栏按钮必须重写代码B.工具栏按钮与对应菜单项的ID相同,工具栏按钮不用重写代码C.工具栏按钮与对应菜单项的ID必须不同,工具栏按钮必须重写代码D.工具栏按钮与对应菜单项的标题相同,工具栏按钮不用重写代码31.关于消息WM_CONTEXTMENU的说法,下面哪个说法是正确的(A)A.单击鼠标右键时发送B.单击鼠标左键时发送C.双击鼠标右键时发送D.双击鼠标左键时发送32.关于消息BN_CLICKED的说法,下面哪个说法是正确的(B)A.单击鼠标右键时发送B.单击鼠标左键时发送C.双击鼠标右键时发送D.双击鼠标左键时发送33.关与函数OnDraw,下面哪个说法是正确的(A)A.窗口首次生成时自动调用B.窗口生成后调用C.窗口消失前调用D.窗口消失后调用34.关与函数OnNewDocumen,下面哪个说法是正确的(A)A.创建文档时调用B.打开文档时调用C.修改文档时调用D.视图第1次连接到文档后,初始显示视图前调用该函数35.关与函数OnInitialUpdate,下面哪个说法是正确的(D)A.创建文档时被调用B.打开文档时被调用C.修改文档时被调用D.视图第1次连接到文档后,初始显示视图前调用该函数36.对滑动条控件有设置SetRange0100TRUE;SetTicFreq4;,下面的说法哪个是正确的(B)A.滑动条的刻度线有25根B.滑动条的刻度线有26根C.滑动条的刻度线有4根D.滑动条的刻度线不确定37.定义逻辑字体的结构变量,下面哪个定义是正确的?(B)A.CFontcfB.LOGFONTlfC.COLORREFrcD.LOGBRUSHcp38.设有定义CRectre10205060,下面哪个说法是正确的?(A)A.定义的矩形左上角顶点坐标是1020,右下角顶点坐标是5060B.定义的矩形左下角顶点坐标是1020,右上角顶点坐标是5060C.定义的矩形右上角顶点坐标是1020,左下角顶点坐标是5060D.定义的矩形右下角顶点坐标是1020,左上角顶点坐标是506039.下列说法正确的是(B)A..内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字inline定义40.下列关于虚基类的描述,错误的是BA.设置虚基类的目的是为了消除二义性B.虚基类的构造函数在非虚基类之后调用C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
二、添空题1.在面向对象方法中,类之间共享属性和操作的机制称为____继承____2.通过使用new和delete两个运算符进行的分配为动态存储分配3.在面向对象的程序设计中,类描述的是具有相似性质的一组对象4.在C++中封装性、继承性和多态性是面向对象思想的主要特征5.MFC框架程序是从WinMain函数开始执行的6.一个const对象只能访问const成员函数7.静态成员函数、内联函数和构造函数不能声明为虚函数8.在函数体之前加const关键字可以防止覆盖函数,改变数据成员的值9.设在程序中使用如下语句申请了一个对象数组Point*ptr=newPoint[2];,则在需要释放ptr指向的动态数组对象时,所使用的语句是delete[]ptr;10.设有下列代码inta=0;doubleb=0;cinab;当用键盘输入
1.25时,b=
0.2511.CWnd的成员函数GetCheckedRadioButton的功能是返回按钮组中被选中按钮的ID12.消息WM_COMMAND的参数wParam的高位字是控件的通知代码13.消息映射宏DELCARE_MESSAGE_MAP的作用是用来声明对消息映射的支持14.CComboBox的成员函数GetCurSel,在组合框中没有选项时返回CB_ERR15.CListBox的成员函数InsertString-1“辽宁省”,把“辽宁省”添加到列表框中的位置是最后16.CWnd的成员函数GetDlgItemText的功能是获取控件的标题文本17.消息SB_THUMBTRACK是在滚动条拖动滚动块时发送18.动态链接库可以提高程序模块的灵活性,因为它本身可以单独设计、编译和调试19.Windows提供的图形界面接口GDI,使得用户能方便实现图形和文本的输出,不必关心与系统相连的外部设备特性20.句柄是一个对操作系统资源的间接引用21.每个MFC应用程序都需要afxwin.h头文件,该头文件定义了MFC的所有类、函数、变量等22.每个Win32应用程序都需要Windows.h头文件,该头文件及其所包含的文件定义了Windows所有的数据类型、函数调用、数据结构和符号常量等23.可以使用ShowWindowSW_NORMAL显示无模式对话框,它是CWnd基类的成员函数24.在VC++
6.0中,菜单、工具栏、对话框、图标等都被视为资源25.Window中的每一个资源都是由标识符来定义的,其中的英文字母不区分大小写26.列表框中第1项的索引值是027.CListBox的成员函数GetCurSel,在列表框中没有选项时返回LB_ERR28.消息SB_LINEDOWN是在滚动条向下滚动一行时发送29.如工具栏按钮属性的提示项是“加法运算\n加法”,则状态栏显示信息为加法运算30.GDI提供高层绘图函数,支持与设备无关的图形显示
三、问答题1.简述Windows编程特点答案Windows程序有如下特点
①消息驱动机制在Windows应用程序中,通过接收消息、分发消息、处理消息来和用户进行交互
②图形设备接口(GDI)Windows提供了一个抽象的图形界面接口,称为图形设备界面,或简称GDI使得用户直接利用系统的GDI函数就能方便实现图形和文本的输出,不必关心与系统相连的外部设备特性
③基于资源的程序设计Windows应用程序包含众多图形元素,如光标、菜单、工具栏、位图、对话框等,统称为资源VC++提供了很多编辑器对这些资源进行编辑,使得用户可以方便地使用这些资源
④动态链接库动态链接库提供的函数,能在Windows程序运行时进行装载和连接可提高程序模块的灵活性2.简述MFC程序的运行机制答案
①程序运行时,首先定义全局程序对象,系统调用缺省的应用程序类的构造函数,该函数把全局程序对象的地址保存在一个全局指针中
②此时WinMain函数接收控制,首先通过全局指针调用应用程序类的InitInstance函数完成应用程序的初始化
③InitInstance函数执行结束,屏幕上显示窗体,WinMain进入消息主循环,等待接收用户消息收到消息后转到系统的Run函数处理
④当用户点击退出按钮时,WinMain调用ExitInstance函数退出3.什么是MFC的消息映射机制?简述映射一个消息的过程答案所谓消息映射机制,即指MFC类中将消息与消息处理函数联系起来,一一对应的机制映射一个消息的过程由三个部分组成
①在处理消息的类中,使用消息宏LARE_MESSAGE_MAP声明对消息映射的支持,并在该宏之前声明消息处理函数
②使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏在类声明之后的地方定义该类支持的消息映入口点,所有消息映射宏都添加在这里,当然不同的消息MFC都会有不同的消息映射宏
③定义消息处理函数,在该函数内添加消息处理代码4.简述DDX/DDV技术是如何实现数据交换和数据校验的?使用时应注意什么问题?答案DDX技术DDX将数据成员变量同对话框模板内的控件相连接,使得数据在控件之间很容易地传输具体使用如下两个函数UpdateDataTRUE或UpdateData实现控件数据向相关联的变量复制UpdateDataFALSE实现数据由相关联的变量传给控件DDV技术DDV技术能根据用户为与控件相关联的变量设定的取值范围,自动对数据进行校验,当超出范围时,发出相应的警告注意事项在DDX/DDV技术中,允许用户为同一个控件关联多个变量,但必须保证这些变量名是互不相同的,且这些变量在同一个类型不能有多个变量5.什么是静态控件?有哪些静态控件?答案静态控件用来显示一个字符串、框、矩形、图标位图或增强的图元文件它可以用来作为标签、框或用来分割其它的控件一个静态控件一般不接收用户输入,也不产生通知消息静态控件种类静态文本,组框,静态图片6.什么是按钮控件?有哪些按钮控件?简述它们的不同答案按钮控件用来实现一种开与关的输入常见的按钮有三种类型按键按钮,单选按钮,复选框按钮按键按钮通常可以立即产生某个动作,执行某个命令,因此也常被称为命令按钮单选按钮通常成组出现,分组后每组中只能有一个被选中复选框通常成组出现,复选框被选中时,复选框中就加上一个标记,复选框常用的有选中和未选中两种状态,用户可以同时选中多个复选框7.什么是文档的序列化?其过程是怎样的?答案文档的序列化使一个类可序列化就是使其具有CArchive的序列化功能,即可以在文档类的Serialize函数中直接通过CArchive引用变量进行该数据的读写操作序列化过程在MFC中,一个可序列化的类必须是CObject的一个派生类,且在类声明中,需要包含DECLARE_SERIAL宏调用,而在类的实现文件中包含IMPLEMENT_SERIAL宏调用,这个宏有三个参数前两个参数分别表示类名和基类名,第三个参数表示应用程序的版本号最后还需要重载Serialize函数,使该类的数据成员进行相关序列化操作8.简述单文档应用程序中是如何实现文档读写的?答案
①当MFCAppWizard创建文档应用程序时,它会自动将“文件File”菜单中的“打开Open”命令ID号为ID_FILE_OPEN映射到CWinApp的OnFileOpen成员函数
②当MFCAppWizard创建应用程序时,它会自动将“文件File”菜单中的“保存Save”命令与文档类CDocument的OnFileSave函数在内部关联起来,但用户在程序框架中看不到相应的代码
③打开和保存文档时,系统都会自动调用Serialize函数事实上,MFCAppWizard在创建文档应用程序框架时已在文档类中重载了Serialize函数,通过在该函数中添加代码可达到实现数据序列化的目的9.函数OnInitialUpdate和OnNewDocument都可以对文档进行初始化工作,叙述它们的区别答案函数:OnInitialUpdate是当应用程序被启动时,或当用户从“文件”菜单中选择了“新建”或“打开”时,视图第1次连接到文档后,在初始显示视图前调用该函数,用户可重载此函数对文档所需信息进行初始化这里的初始化主要是对与文档相联系的视图进行,如设置视图大小、是否有滚动功能等函数OnNewDocument是当用户从“文件”菜单中选择“新建”命令时,框架首先构造一个文档对象,然后调用该函数,用户可在这里对文档数据进行初始化10.什么是列表框和组合框控件?组合框控件有哪些类型?答案列表框是一个列有许多项目让用户选择的控件用户可以在其中选择一个或多个项,列表框中的项目数目可灵活变化,程序运行时可根据需要随时增加或删除当列表框中项目很多时,自动提供滚动功能组合框常用的项目在组合框中显示,用户可以选择其中一项同时还配有一个编辑框,输入组合框中没有的项组合框中的项目数目可灵活变化,程序运行时可根据需要随时增加或删除组合框类型简单组合框、下拉式组合框和下拉式列表框
四、程序分析题1.分析下面的程序要求⑴ 写出程序运行结果⑵ 说明语句*this=a;的含义#includeiostream.hclassCOne{public:COne{x=y=0;}COneintaintb{x=a;y=b;}voidcopyCOnea;voidprint{coutxyendl;}private:intxy;};voidCOne::copyCOnea{ifthis==areturn;*this=a;}voidmain{COneonetwo34;one.print;one.copytwo;one.print;}答案⑴ 0034⑵ 把形参a获得的某对象的值赋给操作该成员函数的对象在本例中,就是将对象two赋给对象one2.设有一个对话框应用程序,对话框类名为CEx_RadioDlg,添加了一个Button按钮,ID号为IDC_BUTTON1和4个Radio按钮,ID号分别为IDC_RADIO1~IDC_RADIO4分析下面的程序段要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能voidCEx_RadioDlg::OnButton1{CStringstr;UINTnID1=GetCheckedRadioButtonIDC_RADIO1IDC_RADIO4;//GetDlgItemTextnID1str;//MessageBoxstr;//}答案⑴UINTnID1=GetCheckedRadioButtonIDC_RADIO1IDC_RADIO4;//返回按钮组中被选中按钮的IDGetDlgItemTextnID1str;//获取控件nID的标题文本,送strMessageBoxstr;//用消息对话框显示str该函数在鼠标左键单击Button按钮时被调用函数功能获取按钮组中被选中按钮的标题文本,用消息对话框显示出来3.设有一个对话框应用程序,对话框类名为CEx_DlgCtrlsDlg分析下面的程序要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能BOOLCEx_DlgCtrlsDlg::OnInitDialog{CStatic*cs;cs=newCStatic;cs-CreateHello!WS_CHILD|WS_VISIBLE|WS_BORDER|SS_CENTERCRect202012040this;//CFont*font=this-GetFont;//cs-SetFontfont;//returnTRUE;}答案⑴cs-CreateHello!WS_CHILD|WS_VISIBLE|WS_BORDER|SS_CENTERCRect202012040this;//创建静态控件,标题为Hello!,子窗体风格,带边框,文本局中,控件左上角顶点坐标为2020,宽120高40,父类窗口为当前窗口(对话框)CFont*font=this-GetFont;//获得对话框字体cs-SetFontfont;//用对话框字体设置静态控件字体⑵函数OnInitDialog在显示对话框之前执行,完成对话框的初始化该函数完成的功能在对话框上创建一个具有指定风格的静态控件,标题为Hello!4.设有一个对话框应用程序,对话框类名为CEx_DlgCtrlsDlg,添加两个Button按钮,ID号分别为IDC_BUTTON1和IDC_BUTTON2分析下面的程序要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能BOOLCEx_DlgCtrls1Dlg::OnCommandWPARAMwParamLPARAMlParam{WORDnCode=HIWORDwParam;WORDnID=LOWORDwParam;ifnID==IDC_BUTTON1nCode==BN_CLICKED//MessageBox你按下的是Button1;ifnID==IDC_BUTTON2nCode==BN_CLICKED//MessageBox你按下的是Button2;returnCDialog::OnCommandwParamlParam;//}答案⑴ifnID==IDC_BUTTON1nCode==BN_CLICKED//如果控件标识符是IDC_BUTTON1并且事件是BN_CLICKED,执行下面语句ifnID==IDC_BUTTON2nCode==BN_CLICKED//如果控件标识符是IDC_BUTTON2并且事件是BN_CLICKED,执行下面语句returnCDialog::OnCommandwParamlParam;//把控件的消息交由其它函数处理,如OnButton1⑵该函数在控件发出通知消息OnCommand时执行函数功能鼠标单击“Button1”时,显示消息对话框,内容为你按下的是Button1鼠标单击“Button2”时,显示消息对话框,内容为你按下的是Button25.设有一个单文档应用程序,IDR_MAINFRAME为菜单标识下面是在框架类中添加的WM_CONTEXTMENU消息处理函数分析下面的程序段要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能voidCEx_SystemMenuView::OnContextMenuCWnd*pWndCPointpoint{CMenumPop;mPop.LoadMenuIDR_MAINFRAME;//CMenu*p=mPop.GetSubMenu4;//p-TrackPopupMenuTPM_LEFTALIGN|TPM_RIGHTALIGNpoint.xpoint.ythis;//}答案⑴voidCEx_SystemMenuView::OnContextMenuCWnd*pWndCPointpoint{CMenumPop;mPop.LoadMenuIDR_MAINFRAME;//装载菜单IDR_MAINFRAMECMenu*p=mPop.GetSubMenu4;//取菜单第4项指针(从0开始),即“加减法”菜单p-TrackPopupMenuTPM_LEFTALIGN|TPM_RIGHTALIGNpoint.xpoint.ythis;//显示弹出式菜单//point.xpoint.y为菜单位置(鼠标位置),this为父窗口}⑵在单文档应用程序窗口空白处,按下鼠标右键时执行该函数功能是显示快捷菜单,快捷菜单是菜单IDR_MAINFRAME的第4项(从0开始)6.下面是在关于状态栏设置的一段代码要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能voidCEx_StatusBarView::OnMouseMoveUINTnFlagsCPointpoint{CStringstr;CMainFrame*pFrame=CMainFrame*AfxGetApp-m_pMainWnd;CStatusBar*pStatus=pFrame-m_wndStatusBar;//ifpStatus{pStatus-SetPaneStyle1SBPS_POPOUT;//str.FormatX=%dY=%dpoint.xpoint.y;pStatus-SetPaneText1str;//}CView::OnMouseMovenFlagspoint;}答案⑴voidCEx_StatusBarView::OnMouseMoveUINTnFlagsCPointpoint{CStringstr;CMainFrame*pFrame=CMainFrame*AfxGetApp-m_pMainWnd;CStatusBar*pStatus=pFrame-m_wndStatusBar;//获得主窗口中的状态栏指针ifpStatus{pStatus-SetPaneStyle1SBPS_POPOUT;//设置状态栏风格str.FormatX=%dY=%dpoint.xpoint.y;pStatus-SetPaneText1str;//在状态栏第二个窗格显示文本str,str为鼠标位置}CView::OnMouseMovenFlagspoint;}⑵该函数当鼠标在单文档窗口内移动时被调用,状态栏第二个窗格显示鼠标当前位置7.分析下面的程序要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能BOOLCMainFrame::PreCreateWindowCREATESTRUCTcs{intcxScreen=::GetSystemMetricsSM_CXSCREEN;intcyScreen=::GetSystemMetricsSM_CYSCREEN;//下面两条语句的作用是cs.cx=cxScreen/2;cs.cy=cxScreen/2-150;//下面两条语句的作用是cs.x=cxScreen-cs.cx/2;cs.y=cyScreen-cs.cy/2;cs.style=~WS_MAXIMIZEBOX;//}答案⑴BOOLCMainFrame::PreCreateWindowCREATESTRUCTcs{intcxScreen=::GetSystemMetricsSM_CXSCREEN;intcyScreen=::GetSystemMetricsSM_CYSCREEN;//下面两条语句的作用是设置主窗口宽为1/2屏宽、高为1/2屏幕高cs.cx=cxScreen/2;cs.cy=cxScreen/2-150;//下面两条语句的作用是设置主窗口左上角坐标,使窗口位于屏幕中央cs.x=cxScreen-cs.cx/2;cs.y=cyScreen-cs.cy/2;cs.style=~WS_MAXIMIZEBOX;//去处最大化按钮}⑵当窗口创建之前,系统自动调用该函数该函数完成对窗口风格的设置,使窗口宽为1/2屏宽、高为1/2屏幕高,位于屏幕中央,无最大化按钮8.分析下面的程序段要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能voidCEx_FontView::OnDrawCDC*pDC{LOGFONTlf;memsetlf0sizeofLOGFONT;lf.lfItalic=1;CFontfont;font.CreateFontIndirectlf;//pDC-SelectObjectfont;//pDC-TextOut1010我喜欢VisualC++!;//}答案⑴voidCEx_FontView::OnDrawCDC*pDC{LOGFONTlf;memsetlf0sizeofLOGFONT;lf.lfItalic=1;CFontfont;font.CreateFontIndirectlf;//用lf结构创建字体pDC-SelectObjectfont;//把字体装入设备环境pDC-TextOut1010Hello!;//在指定位置显示字符串}⑵ 窗口首次生成时,自动调用视图类函数OnDraw程序功能是在指定位置
(1010),用由lf结构创建的字体输出文本Hello!9.分析下面的程序要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能voidCEx_PenView::OnDrawCDC*pDC{CRectrc410120110220;COLORREFcolor4=RGB19200;//CBrushbrush4=HS_FDIAGONALcolor4;pDC-SelectObjectbrush4;//pDC-Ellipserc4;//}答案⑴voidCEx_PenView::OnDrawCDC*pDC{CRectrc410120110220;COLORREFcolor4=RGB19200;//设置颜色变量CBrushbrush4=HS_FDIAGONALcolor4;pDC-SelectObjectbrush4;//把画刷装到设备环境中pDC-Ellipserc4;//绘制圆,用画刷颜色填充圆}⑵ 窗口首次生成时,自动调用视图类函数OnDraw程序功能是在指定矩形rc4内绘制圆,用画刷颜色填充圆10.分析下面的程序要求⑴ 在注释符号//后面对各条语句进行注释,说明该语句的作用⑵ 该函数在什么时候被调用?写出该函数完成的功能voidCEx_PenView::OnDrawCDC*pDC{CRectrc11010110110;COLORREFcolor1=RGB00192;//CPenpen1PS_SOLID1color1;pDC-SelectObjectpen1;//pDC-Rectanglerc1;//}答案⑴voidCEx_PenView::OnDrawCDC*pDC{CRectrc11010110110;COLORREFcolor1=RGB00192;//设置颜色变量CPenpen1PS_SOLID1color1;pDC-SelectObjectpen1;//把画笔装到设备环境中pDC-Rectanglerc1;//用指定画笔绘制矩形}⑵窗口首次生成时,自动调用视图类函数OnDraw程序功能是在指定矩形rc1内,用所定义的画笔绘制矩形
五、程序设计题1.设计一个单文档应用程序,要求通过菜单打开通用字体对话框,按用户选择的字体、字号、颜色等属性在窗口中显示字符串“我喜欢VisualC++!”要求⑴写出设计步骤⑵完成代码设计答案⑴设计步骤
①使用MFCAppWizardexe向导创建一个单文档应用程序
②选中资源面板底端的ResourceView
③在资源树中选择并展开Menu结点,其中IDR_MAINFRAME为系统预定义菜单
④双击IDR_MAINFRAME打开菜单编辑器,增加一项设ID为ID_FONT
⑤建立菜单消息COMMAND的处理函数⑵编写代码voidCEx_DialogFontView::OnFont{LOGFONTlf;memsetlf0sizeofLOGFONT;strcpylf.lfFaceNameTimesNewRoman;CFontDialogdlglfCF_EFFECTS|CF_SCREENFONTS0this;ifdlg.DoModal==IDOK{CClientDCdcthis;dlg.GetCurrentFontlf;CFontmyfont;myfont.CreateFontIndirectlf;dc.SelectObjectmyfont;dc.SetTextColordlg.GetColor;dc.TextOut100100我喜欢VisualC++!;}}2.设计一个对话框应用程序Ex_Check,保留“取消”按钮,标题改为“退出”,删除其它默认控件,添加1个命令按钮,4个复选框,一个组框初始运行“篮球”被选中;鼠标单击按钮“显示信息”时,用消息对话框显示选中的内容运行界面如下要求⑴写出设计步骤⑵完成代码设计答案⑴设计步骤使用应用程序向导,建立一个对话框应用程序Ex_Check;
①设计界面添加两个按钮,ID分别为IDC_BUTTON1和IDC_BUTTON2,标题为“显示信息”和“退出”;一个组框,标题为“爱好”;在组框控件内,添加4个复选框,ID为IDC_CHECK1~IDC_CHECK4,标题分别为“篮球”、“足球”、“排球”、“棒球”;使用“布局”调整控件大小和位置
②生成两个按钮的消息BN_CLICKED的处理函数⑵编写代码
①在对话框初始化函数中写入初始化代码,保证初始运行时“篮球”被选中BOOLCEx_CheckDlg::OnInitDialog{CButton*pBtn=CButton*GetDlgItemIDC_CHECK1;pBtn-SetCheck1;//或用CheckRadioButtonIDC_CHECK1IDC_CHECK4IDC_CHECK1;returnTRUE;}
②在标题为“显示信息”按钮的消息BN_CLICKED处理函数中写入代码voidCEx_CheckDlg::OnButton1{CStringstr1str2;UINTnCheckIDs
[4]={IDC_CHECK1IDC_CHECK2IDC_CHECK3IDC_CHECK4};CButton*pBtn;forinti=0;i4;i++{pBtn=CButton*GetDlgItemnCheckIDs[i];ifpBtn-GetCheck{pBtn-GetWindowTextstr1;str2=str2+str1;str2=str2+,;}}MessageBox我喜欢+str2;}注控件的ID号只要符合VC标识符定义规则即可,不必与答案完全一致3.设计一个对话框应用程序Ex_CComboBox,保留“取消”按钮,标题改为“退出”,删除其它默认控件在对话框初始化函数中,用代码输入组合框中的数据,为每人关联一个电话号码如姓名为“王一”、“李二”、“张三”、“赵四”,电话号码为“00000000”、“11111111”、“22222222”、“33333333”等选中组合框中的一项,单击按钮“显示电话号码”时,在编辑框中显示该人的电话号码初始运行界面如图1所示,选择“张三”后的运行界面如图2所示初始运行界面选择“张三”后的运行界面图1图2要求⑴写出设计步骤⑵完成代码设计答案⑴设计步骤使用应用程序向导,建立一个对话框应用程序Ex_CComboBox;
①设计界面添加1个组合框,ID为IDC_COMBO1;添加1个编辑框,ID为IDC_EDIT1;添加1个按钮,标题为“显示电话号码”,ID为IDC_BUTTON1;删除缺省按钮“确定”,保留缺省按钮“取消”,标题改为“退出”使用“布局”调整控件大小和位置
②为控件添加关联变量为组合框添加CComboBox类型的关联变量m_CL;为编辑框添加CString类型的关联变量m_E;
③添加消息处理函数为按钮添加消息BN_CLICKED的处理函数;为对话框添加消息WM_DESTROY的处理函数;⑵编写代码
①初始化代码BOOLCEx_CComboBoxDlg::OnInitDialog{m_CL.AddString王一;m_CL.AddString李二;m_CL.AddString张三;m_CL.AddString赵四;CStringtelephone=00000000;m_CL.SetItemDataPtr0newCStringtelephone;telephone=11111111;m_CL.SetItemDataPtr1newCStringtelephone;telephone=22222222;m_CL.SetItemDataPtr2newCStringtelephone;telephone=33333333;m_CL.SetItemDataPtr3newCStringtelephone;returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}
②“显示电话号码”按钮消息BN_CLICKED的处理函数voidCEx_CComboBoxDlg::OnButton1{CStringsd;inti=m_CL.GetCurSel;sd=*CString*m_CL.GetItemDataPtri;m_E=sd;UpdateDataFALSE;}
③对话框退出代码voidCEx_CComboBoxDlg::OnDestroy{CDialog::OnDestroy;//TODO:Addyourmessagehandlercodehere//对话框退出时,释放关联数据占有的空间forintk=0;k4;k++deleteCString*m_CL.GetItemDataPtrk;}注控件的ID号和关联变量名称只要符合VC标识符定义规则即可,不必与答案完全一致,但类型必须正确4.设计一个对话框应用程序Ex_Progress,保留“取消”按钮,标题改为“退出”,删除其它默认控件添加1个进展条,2个按钮在对话框初始化函数中设置进展条范围、步长和初始位置运行界面如下单击“后退”按钮,进展条向后退;单击“继续”按钮,进展条向前进;要求⑴写出设计步骤⑵完成代码设计答案⑴设计步骤使用应用程序向导,建立一个对话框应用程序Ex_Progress;
①设计界面添加1个进展条,ID为IDC_PROGRESS1;添加2个按钮,ID为IDC_BUTTON1和IDC_BUTTON2;删除缺省按钮“确定”,保留缺省按钮“取消”,标题改为“退出”使用“布局”调整控件大小和位置
②为控件添加关联变量为进展条添加CProgressCtrl类型的变量m_P;
③添加消息处理函数为按钮添加消息BN_CLICKED的处理函数;⑵编写代码
①对话框初始化代码BOOLCEx_ProgressDlg::OnInitDialog{m_P.SetRange0100;//设置进展条范围的上限和下限值m_P.SetStep5;//设置步长m_P.SetPos30;//设置进展条初始位置returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}
②“后退”按钮代码voidCEx_ProgressDlg::OnButton1{intnPos=m_P.GetPos;//获取进展条当前位置intnLownUp;m_P.GetRangenLownUp;//获取进展条范围nPos=nPos-5;ifnPosnLownPos=nLow;m_P.SetPosnPos;//设置进展条初始位置}
③“继续”按钮代码voidCEx_ProgressDlg::OnButton2{m_P.StepIt;}。