选择题(2’×20),填空题(2’×15),简答题(4’×4),综合题(6’+8’) 一、选择题
1、 下面说法正确的是( A )
A、构造函数可以重载,析构函数不能重载。 B、构造函数不能重载,析构函数可以重载。
C、构造函数可以重载,析构函数也可以重载。D、构造函数和析构函数都不可以重载。 2、 下面关于 API 的描述错误的是( D )
A、API 函数构建在 Windows 操作系统上。
B、创建应用程序,打开窗口、描绘图形都要调用 API 函数。
C、API 是用来控制 Windows 各个元素的外观和行为的一套预定义的 Windows 函数 D、现在,Windows 程序员编写程序只能使用 API 函数。 3、 下面关于 MFC 的描述错误的是(D)
A、MFC 是指微软基础类库。
B、MFC 是微软公司提供的用在 Visual C++环境下编写 Windows 应用程序的一个框架和引擎。 C、MFC 对 API 函数进行了 C++封装。 D、MFC 不提供对底层 API 的直接调用
4、 下列对于 WinMain 函数的描述中,错误的是 (C )
A、WinMain 函数的名称是固定的。 B、WinMain 函数是 Windows 程序的入口点。
C、WinMain 函数不能有参数 D、窗口函数与 WinMain 的关联是通过窗口类的注册实现的。 5、 对消息循环描述错误的是(B)
A、GetMessage 函数在消息队列非空时,取得消息并返回。
B、若 GetMessage 取得的是 WM_QUIT 消息则返回非 0,否则返回 0. C、GetMessage 函数在消息队列为空时,将一直空闲。 D、TranslateMessage 将虚拟键转换成字符消息。 6、 注册窗口类型的 API 函数是( A)
A、RegisterClass A、RegisterClass
B、CreateWindow C、ShowWindow
D、UpdateWindow
D、UpdateWindow
7、 创建窗口的 API 函数是( B)
B、CreateWindow C、ShowWindow
8、 关于 GDI 的描述错误的是( D )
A、GDI 指图像设备接口。
B、GDI 负责用户和绘图程序之间的信息交换 C、GDI 控制在输出设备上显示图形或文字。
D、采用了 GDI,编程时还需关心显示卡或打印机的驱动程序。 9、 关于设备上下文的描述错误的是( C )
A、设备上下文是一种包含有关某个设备的绘制属性的 Windows 数据结构。 B、设备上下文允许在 Windows 中进行与设备无关的绘制。
C、设备上下文可以用于绘制到屏幕、打印机,但不能绘制到图元文件。 D、设备上下文对象封装了绘制线条、形状和文本等的 Windows API。 10、 关于设备上下文的描述错误的是( D )
A、设备上下文是一种包含有关某个设备的绘制属性的 Windows 数据结构。 B、设备上下文允许在 Windows 中进行与设备无关的绘制。 C、设备上下文可以用于绘制到屏幕、打印机和图元文件。
D、设备上下文对象封装了绘制线条、形状的 Windows API,没有封装文本的 Windows API。 11、 为了完成消息映射,不需要 ( D )。
A. 在类的定义里,增加消息处理函数声明。
B.在类的实现里,实现消息处理函数。
C. 在类的定义里,添加一行声明消息映射的宏 DECLAR E_MESSAGE_MAP。 D.在类的定义里,使用 IMPLEMENT_ MESSAGE_MAP 宏实现消息映射。 12、 下列标准控件中( B )不是CButton类。
A、普通按钮 B、静态文本
C、单选按钮
D、复选按钮
13、 所有的控件类都是从( B )类派生。
A、CWnd
B、CCobject
C、CStatic
D、CButton
1
14、 在尾部添加一个菜单项的方法是( A )。
A、AppendMenu B、TrackPopupMenu C 、LoadMenu 15、 创建空的弹出式菜单的方法是( )。
A、CreateMenu
B、CreatePopupMenu C、GetPopupMenu
D、TrackPopupMenu
D、InsertMenu
16、 创建控件消息时,可以使用类向导建立消息映射和消息处理函数之间的关系,在源文件中消息映射表中其消息映射宏
是( )。 A、ON_COMMAND
B、ON_MESSAGE C、ON_WM_LBUTTONDOWN D、ON_BN_CLICKED
17、 创建命令自定义消息时,在源文件中的消息映射表中手动添加其消息映射宏是( B )
A、ON_COMMAND B、ON_MESSAGE C、ON_WM_LBUTTONDOWN D、ON_BN_CLICKED 18、 VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,表示按钮控制消息(A )
A、BM
B、CB
C、DM
D、EM
19、 Windows应用程序常用消息,产生单击鼠标左键的消息是(A )
A、WM_LBUTTONDOWN
B、WM_RBUTTONUP C、WM_RBUTTONDBLCLK D、WM_LBUTTONUP
20、 Windows应用程序常用消息,按下一个非系统键时产生的消息是(B )
A、WM_RBUTTONUP B、WM_KEYDOWN C、WM_KEYUP D、WM_POPDOWN 21、 继承具有( B),即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员
A、规律性 B、传递性 C 、重复性 D 、多样性 22、 由CreateWindow函数发出的消息( B)
A、WM_KEYDOWN B、WM_CREAT C、WM_DESTROY D、WM_CLOSE 23、 由PostQuitMessage函数发出的消息( A)
A、WM_QUIT B、WM_CREAT C、WM_DESTROY D、WM_CLOSE 24、 包含一个消息的全部信息,是消息发送的格式的数据结构是(C )
A、RECT
B、WINDCLASS C、MSG
D、POINT
25、 定义了一个矩形区域及其左上角和右下角的坐标的数据结构是( A)
A、RECT
B、WINDCLASS C、MSG
D、POINT
26、 输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字符的位置,获取当前使用字体信息函数
( C)
A、GetFontMetrics B、GetFontMetric C、GetTextMetrics D、GetTextMetric
27、 文本输出函数TextOut(HDC hdc, int X, int Y,LPCTSTR lpstring, int nCount)第四个参数nCount记录的是( A)
A、lpstring中的字符串的字节数 B、字符串的长度 C、lpstring的长度 D、lpstring串的循环次数 28、 虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的( A )参数中
A、wParam C、VK B、Param D、VB 29、 Alt键与相关输入键的组合产生的消息是(A )
A、系统按键消息 B、非系统按键消息 C、空消息 D、组合消息 30、 一个按键的组合产生了一个可以显示的字符时,就产生了一个(A )
A、字符消息 B、按键消息 C、组合消息 D、空消息 31、 资源描述文件中ACCELERATORS定义的是:( D)
2
A、菜单 B、弹出式菜单 C、组合键 D、加速键资源 32、 资源描述文件中DIALOG定义的是:(C )
A、菜单 B、弹出式菜单 C、对话框资源 D、加速键资源 33、 下列消息不是窗口消息的是( C)。
A.WM_PAINT
B.WM_MOUSEMOVE C. WM_COMMAND D. WM_CHAR
34、 Afx为前缀的函数(数据库类函数和DDX函数除外)和变量中,表示无条件终止一个应用程序的是( A )
A、AfxAbort B、AfxBeginThread C、AfxFormatString D、AfxMessageBox
35、 Afx为前缀的函数(数据库类函数和DDX函数除外)和变量中,表示显示一个Windows消息框是(D )
A、AfxAbort B、AfxBeginThread C、AfxFormatString D、AfxMessageBox 36、 在MFC中表示窗口类的是(D )
A、CDialog类 B、CMenu类 C、CView类 D、CWnd类 37、 根据对话框的行为性质,对话框可以分为两类:( B )
A、对话框资源和对话框类B、模式对话框和非模式对话框C对话框资源和对话框模板 D、消息对话框和模式对话框 38、 一个视图对象能连接( )文档对象,一个文档对象能连接(D )视图对象。
A、多个,多个 B、多个,一个 C、一个,一个 D、一个,多个 39、 下面四个MFC类中哪一个是管理MFC应用程序的 ( A )
A. CWinApp B. CMainFrame C. CDocument D. CView 二、填空题 1.
消息循环的处理过程如下: A 函数不断侦察应用程序的消息队列,若队列为空,该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它拷贝到msg结构变量中,同时该函数返回TRUE;得到消息msg后, C 把来自键盘的命令翻译成WM_XXX消息命令形式。 B 函数通知Windows把每个消息分发给相应的窗口函数。应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数。 A、GetMessage( )
D、SendMessage( ) 2. 3. 4.
B、translateMessage( ) E、DispatchMessage( )
C、PostMessage( )
CDC 类叫做设备描述表类。
在VC程序中通过类的 成员函数 来访问其内部的数据成员,成员函数是类与外部程序之间的接口。
采用函数SendMessage 和 PostMessage 都会向窗体发送一个消息,但 SendMessage在消息处理完成后返回,而 PostMessage 把消息放进消息队列就立即返回 。
5. 使用MFC AppWizard产生的应用程序的类型主要包括:单文档应用程序、 多文档应用程序 和 基于对话框的应用程序 。
6. 7. 8. 9.
VC++的工作区窗口包含 3 个视图,分别是 类视图 、 资源视图 和 文件视图 。 MFC 类库的基类是 CObject 。
若在绘制客户区时获取设备上下文调用的函数是GetDC,则释放它是调用的函数是 ReleaseDC 。 若在绘制客户区时获取设备上下文调用的函数是BeginPaint,则释放它是调用的函数是 EndPaint 。
10. Windows 窗口中,菜单分为两种: 下拉式菜单 和 弹出式菜单 。 11. Windows 应用程序的消息来源主要包括 系统消息 和 自定义消息 。
12. Windows 应用程序的消息按处理方式主要包括 窗口消息 、 命令消息 和 控件通知消息 。
13. 数据更新时,可调用Invalidate或InvalidateRect函数使客户区全部或者部分无效,出发 Windows 发送( WM_PAINT )
3
消息,并调用 OnDraw 消息处理函数重绘客户区或刷新窗口。
14. 当用户按下键盘上的某个按急键时,键盘的接口会产生与该按键相对应的 扫描码 ,它存在设备相关性。因此为
了实现与设备无关,Windows 应用程序的编写过程中直接使用 虚拟码 来对键盘进行操作。
15. UpdateData 函数可以用在对话框中更新数据,将控件数据保存到数据成员应带参数 TRUE ,反之应带 FALSE 。 16. 类的定义一般分为 声明 和 定义 两部分,其中前一部分告诉使用者“ 干什么” ,而后一部分告诉使用者“怎
么干” 。
17. 菜单类对象和位图类对象分别通过 LoadMenu 、 LoadBitmap 函数加载菜单资源和位图资源。 三、简答题
1、 什么是设备的无关性?什么是映像模式?
解:设备的无关性就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程时无需考虑特殊的硬件设置。
映像模式定义了将逻辑单位转化为设备的度量单位以及设备的x方向和y方向,这样程序员可在一个统一的逻辑坐标系中操作而不必考虑输出设备的坐标系情况。
2、 解释代码 CWinApp::~CWinApp(){delete m_pMa inWnd;} 。
解:这个函数是 CWinApp 的析构函数,完成的功能是在 CWinApp 对象释放时将 CFrameWnd类的指针删除,以释放资源。
3、 应用程序类主要完成的功能是?
解:一是调用成员函数 InitInstance 来完成窗口的设计、注册、创建、和显示工作。 二是调用成员函数 Run 来完成消息循环。
4、 什么是句柄?它在Windows程序中的作用是什么?
解:句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数(一个4字节长的数值),Windows使用各种各样的句柄标识诸如应用程序实例、窗口、控制、位图和GDI对象等等。 5、 Windows 程序的入口点是什么函数 ? 它主要完成什么功能 ?
解:Windows 程序的入口点函数是 WinMain(),完成的主要功能是创建、注册和显示窗口,以及启动消息循环完成消息驱动。
6、 创建一个窗口要经过几个步骤?
解:要经过 5 个步骤:设计窗口类型、注册窗口类型、创建窗口、显示窗口和消息循环。 7、 简述 CWnd 类的对象和窗口句柄的关系。
解:CWnd 对象的创建和销毁,是由 CWnd 类的构造函数和析构函数完成的,而窗口句柄是Windows 内部的一种数据结构,它由 CWnd 类的 Create 成员函数创建,由其析构函数销毁。 8、 在MFC应用程序中如何对应用程序和对话框进行初始化?
解:一般在虚函数InitInstance 中对应用程序进行初始化;在 OnInitDialog函数中对对话框进行初始化。 9、 什么是内存设备上下文?为什么要用到它?
解:内存设备上下文又称兼容设备上下文。内存设备上下文主要为特定的设备存储位图,它支持在位图上进行绘制操作。 四、综合题
1、 简单的计算程序界面如下图所示,操作数1对应编辑框控件的ID为 IDC_EDIT1,对应值类型的成员变量m_op1(int);
操作数2对应编辑框控件的ID为IDC_EDIT2,对应值类型的成员变量m_op2(int);计算结果对应的编辑框控件的ID 为IDC_EDIT3,对应值类型的成员变量m_result(int)。 假设输入的数为整数,加法按钮的功能是将两操作数相加,并将结果在对应的编辑框IDC_EDIT3显示出来。写出加法按钮对应的代码。
4
为 CView ), CStudentDoc 类定义如下 class CStudentDoc : public CDocumet { public: String m_Name; int m_Age;
void CExDlg::OnButton1()
{ UpdateData(TRUE);
m_result = m_op1 + m_op2; UpdateData(FALSE); }
2、 文档视图结构的 SDI 应用程序的文档类为 CStudentDoc (基类为 CD ocument ),视 图 类为 CStudentView (基类
double m_Score; // 其余部分省略 //… }
视图类 CStudentView 中以下面的格式显示 CStudentDoc 中的 3 个数据成员(构造函数已 初始化,分别为:张三,20,589.0),完成 CStudentView::OnDraw 函数实现此功能
void CStudentView::OnDraw(CDC *pDC) { CStudentDoc *pDoc=GetDocument();
pDC->TextOut(5,5,\姓名 年龄 成绩\ pDC->MoveTo(0,25); pDC->LineTo(200,25); CString strLine;
strLine. Format(\ pDC->TextOut(5,30,strLine); }
3、 新建基于对话框的应用程序 Test,完成对编辑框输入后,点击确定按钮弹出对话框显示学生信息的功能。如图所示:
5
三个编辑框从上到下的 ID 分别为:IDC_Name,IDC_Age,IDC_Score,绑定的成员变量分别是 CString m_sName,UINT m_nAge,float m_fScore.已完成确定按钮(IDOK)的消息映射。编 写 void CTestDlg::OnOK() 完成对应功能,要求使用两种方法。 void CTestDlg::OnOK(){ CString str,str2; UpdateData(TRUE);
str.Format(\姓名:%s\ str2+=str;
str.Format(\年龄:%d\
str2+=str;
str.Format(\成绩:%f\ str2+=str; MessageBox(str2); }
4、 创建一个模态对话框,实现如下功能:对话框提供 4 个编辑框,分别对应矩形的长和宽, 面积和周长,点击确定按钮计算出面积和周长。
已知控件ID和绑定的数据成员关系如上图左边所示,运行结果如上图右图所示。
编写void CZcDlg::OnOK() 实现上述功能。 void CZcDlg::OnOK(){ UpdateData(TRUE); m_area=m_len*m_wid; f m_cir=(m_len+m_wid)*2; UpdateData(FALSE); }
6
三个编辑框从上到下的 ID 分别为:IDC_Name,IDC_Age,IDC_Score,绑定的成员变量分别是 CString m_sName,UINT m_nAge,float m_fScore.已完成确定按钮(IDOK)的消息映射。编 写 void CTestDlg::OnOK() 完成对应功能,要求使用两种方法。 void CTestDlg::OnOK(){ CString str,str2; UpdateData(TRUE);
str.Format(\姓名:%s\ str2+=str;
str.Format(\年龄:%d\
str2+=str;
str.Format(\成绩:%f\ str2+=str; MessageBox(str2); }
4、 创建一个模态对话框,实现如下功能:对话框提供 4 个编辑框,分别对应矩形的长和宽, 面积和周长,点击确定按钮计算出面积和周长。
已知控件ID和绑定的数据成员关系如上图左边所示,运行结果如上图右图所示。
编写void CZcDlg::OnOK() 实现上述功能。 void CZcDlg::OnOK(){ UpdateData(TRUE); m_area=m_len*m_wid; f m_cir=(m_len+m_wid)*2; UpdateData(FALSE); }
6