C) 鼠标的位置信息可以从wParam中得到 D) 鼠标的位置信息可以从lParam中得到
7. 已知语句SetTimer(NULL,1,100,NULL),则以下说法正确的是( AD )。 A) 设置了一个定时器,该定时器不能正常起作用 B) 设置一个定时器,能够正常起作用 C) 设置了一个定时器,时间间隔为1秒 D) 设置了一个定时器,时间间隔为100毫秒
8. 下列选项中属于Windows GDI资源的是( ABC )。 A) 位图 B) 画笔 C) 字体 D) 窗口 9. 能用于绘制直线的函数为:( AB )
A) LineTo B) Polyline C) Arc D) PolyBezier 10. 画笔的线型包括:( ABD )
A) 实线 B) 点划线 C) 波浪线 D) 虚线 11. 创建画刷的函数有: ( ABC )
A) CreateHatchBrush B) CreateSolidBrush C) CreatePatternBrush D) CreateLogicBrush
12. 在Windows消息机制中,消息系统3大关键要素是( ABC )。 A) 消息队列 B) 消息循环 C) 消息处理函数 D) 消息映射
13.下列哪种情况下系统可能向窗口发送WM_PAINT消息?( BCD ) A)窗口最初创建时
B)窗口移动后部分区域由不可见变为可见 C)窗口大小改变后 D)滚动条滚动后
14.匈牙利表示法的变量一般分为哪几个部分?(ABC) A)属性(例如g_) B)类型 C)描述 D)后缀
15.下列选项中,可以用Windows句柄标识的有( ABD )。 A)窗口 B)文件 C)消息 D)字体
16.关于Windows句柄,下列说法正确的是( AD )。 A)每个运行着的Windows程序都有对应的Windows实例句柄 B)同1个Windows程序打开多次时,对应同1个实例句柄 C)1个Windows实例句柄只能对应1个窗口句柄 D)1个Windows实例句柄可以对应多个窗口句柄 三、名词解释
1、事件:可能触发计算机程序做出相应反应的刺激
2、句柄:为了区别于普通变量的标识,Windows把这种复杂对象的标识叫做句柄
3、消息:为了描述事件的各种信息(例如,何时何地发生了何种事件等),Windows定义了一个结构,这个结构就叫做”消息”
4、Windows的API函数:由操作系统提供的,用户可以使用的函数就叫做API 5、Windows SDK程序:使用软件开发工具包开发出来的Windows应用程序
6、资源:资源就是一种可供Windows应用程序利用,可单独编辑,并可动态加载的数据 7、图象设备接口(GDI):Windows把用于改变DC属性的操作,即与绘图相关的操作都制作成函数,这些函数的集合就叫做图形设备接口
8、CDC类:在面向对象程序设计思想中,把DC和GDI函数封装到一起形成CDC类 9、回调函数:系统调用用户编写的函数过程叫做“回调”,所以这种被系统调用的函数也
第6页
叫做“回调函数”
10、无效显示区:在有效提高拆分窗口显示更新效率的方法中,程序只重绘必须重绘的区域 11、控件:Windows设计了一些具有图形外观的程序实体,这些程序实体在鼠标或键盘的作用下会使程序出现不同的响应,这些可以接收或者产生事件的程序实体就叫做控件
12、类信息表:MFC程序在不同的场合下还经常用到类的其他信息,于是MFC就把这些信息统统都放在映射表项中,并把它叫做类消息表
13、消息循环:while(GetMessage(&msg,NULL,NULL,NULL)) {TranslateMessage(&msg); DispatchMessage(&msg);} 四.填空题
1、 在MFC中,用户可以通过项目工作区窗口的ResourceView视图来查看资源。 2、 一个单文档的MFC应用程序框架一般包括5个类:应用程序类、框架窗口类、视图类、
文档类和文档模板类。
3、 Windows是一个基于消息的消息驱动系统。 4、 项目工作区文件的扩展名是dsw。
5、 MessageBox函数弹出一个小的对话框向用户显示短信息,并将用户最终的选择返回给
调用者。
6、 在通常情况下,视图派生类的成员函数中通过调用GetDocument函数得到当前文档对
象的指针。
7、 Windows程序中的消息有窗口消息、命令消息和控件通知消息三种类型。 8、 MFC中的集合类包括数组、列表(链表)、映射(顺序可变)。
9、 在进行绘图时,画刷用于指定图形的填充样式,画笔用于指定图形的边框样式。 10、用户按下键盘按键并放开的过程中,将产生至少三条消息:WM_KEYDOWN,WM_CHAR,WM_KEYUP。
11、Windows API中API的中文译文是应用程序接口 。 12、MFC的中文译文是微软基础类库 。 13、GDI的中文译文是图形设备接口。
14、全局函数AfxGetApp()可以得到CWinApp应用类指针。
15、MFC中可自动重绘的绘图代码一般位于项目的视图类的OnDraw()函数中。 16、在视图中,GetDocument()函数可得到对应的文档对象指针。
17、在文档中,GetFirstviewPosition()和GetNextview()配合可用来遍历所有和文档关联的视图。
18、在MFC中,用CRect类来描述一个矩形区域的大小 。
19、在任何时刻设备环境中必须有一支画笔,并且只能有一支。因此在使用自己定义的画笔时,要使用CDC的函数把默认画笔替换为自己定义的画笔,这个函数是SelectObject() 。 20、MFC的缺省的映射模式是MM_TEXT,对应的单位为像素 。
21、在视图类中为了访问与视图关联的文档对象中数据,应该先调用GetDocument() 函数得到 相关联文档对象指针 。
22、利用MFC AppWizard可以生成SDI界面、MDI界面和基于对话框界面的程序。 23、在框架窗口中,GetActiveDocument()函数可得到当前活动文档指针,
GetActiveView()函数可得到当前活动视指针。
24.MFC对话框类的基类是CDialog ,用户自定义对话框类都是从它派生而来。
25.Windows系统是一个消息响应事件驱动的操作系统,消息是应用程序与操作系统交互的手段。
第7页
26.GetMessage( )被用来从消息队列获取消息,
27.函数TranslateMessage( )用来把键盘消息转换为字符消息,函数DispatchMessage( )用来向系统派送消息。
五、选择填空题(每空1分,共15分)
1、 B 代表窗口客户区的显示设备上下文, C 代表整个窗口的显示设备上下文。 A、CPaintDC B、CClientDC C、CWindowDC D、CMetaFileDC 2、消息循环的处理过程如下:
A 函数不断侦察应用程序的消息队列,若队列为空,该函数一直运行,不返回;一旦发现队列不为空,便取出一条消息,把它拷贝到msg结构变量中,同时该函数返回TRUE;得到消息msg后, B 把来自键盘的命令翻译成WM_XXX消息命令形式。 E 函数通知Windows把每个消息分发给相应的窗口函数。应用程序并不直接调用窗口函数,而由Windows根据消息去调用窗口函数,因此,窗口函数经常被称为回调函数。 A、GetMessage( ) B、translateMessage( ) C、PostMessage( ) D、SendMessage( ) E、DispatchMessage( )
3、滚动条类CScrollBar的成员函数规定了滚动条的操作。设置滚动条的范围使用 C 函数,设置滚动块的位置使用 E 函数,获取滚动块的当前位置使用 F 函数。 A、SetPos B、SetRange C、SetScrollRange D、GetPos E、SetScrollPos F、GetScrollPos G、 GetScrollRange
4、所有的文档类都派生于 C ,所有的视图类都派生于 A 。 A、CView B、CWindow C、CDocument D、CFormView 5、 C 包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由程序来处理消息; D 用来与Windows的控制对象,如列表框、按钮、复选框等进行双向通信。当用户在列表框中改动当前选择或改变了复选框的状态时发出此类消息。
A、系统消息 B、用户消息 C、输入消息 D、控制消息
6、使用 B 获取的设备上下文在退出时,必须调用ReleaseDC( )释放设备上下文。 A、GetWindowRect( ) B、GetDC( ) C、BeginPaint() D、GetClientRect( )
六.判断题
1. 所谓的Windows API就是独立于C语言的一套全新的程序设计语言。( × ) 2. 在Windows编程约定中,CHAR数据类型和TCHAR数据类型是相同的。( × ) 3. 匈牙利命名法是所有程序都必须遵循的一个规则,变量的命名必须按照规则进行。( × )
4. 在Windows编程约定中,代表窗口句柄的数据类型是HWND。( √ ) 5. 在Windows编程中,使用窗口句柄来操作具体的窗口。( √ )
6. 在Windows的消息结构中,键盘的按键字符信息被保存在lParam中。( × ) 7. 在Windows消息机制中,WM_TIMER消息表示创建了1个定时器。( × ) 8. 所有的Windows程序,其入口函数必须名为WinMain。( × )
9. PostMessage和SendMessage的区别在于前者投递消息到队列,而后者直接调用消息响应函数。( √ )
10. 在Windows编程中,AppendMenu可以在菜单的任意位置插入新的菜单项。( × ) 11. 在Windows编程中,菜单可以在资源视图中设计,一旦载入程序,就不能再被更改。( × )
12. 在Windows编程中,键盘按键弹起时,会返回消息WM_KEYDOWN。( × ) 13. 在Windows编程中,鼠标消息中不包含任何键盘信息。( × ) 14. 在Windows编程中,1个程序中只允许设置一个定时器。( × )
15. 画笔颜色构成是0x00BBGGRR,其中B、G、R分别代表1位16进制数表示蓝、绿和红色分量的大小。( √ )
16. 对于GDI点阵字体和GDI笔划字体,Windows都可以合成粗体、斜体、加底线和加删
第8页
除线,而不需要为每种属性另外储存字体。( √ )
17. FillRect中指定的画刷是用于画矩形本身和边框,FrameRect中指定的画刷是用于画矩形的边框。( × )
18. Win32 API可以直接读取所有的图像格式。( × ) 19.打开一个项目,只需打开对应的项目工作区文件。 20.基于对话框的应用程序,也有文档类和视图类。 21.所有的Windows应用程序都是消息驱动的。
(× )
(× )
(√ ) (× )
(√ )
(× ) (√ )
22.COMMAND(菜单消息类型)是更新命令用户接口消息。 23.删除CPen对象可调用CPen对象的DeleteObject函数。 24.CBrush是GDI对象。
25.Windows应用程序的入口也是main函数。
七.简答题
1.Windows应用程序的主函数有哪三个主要任务
2.运行程序后单击鼠标右键弹出对话框提示“您按下了鼠标右键”对话框。简要说明设计步骤。 参考答案:
(1)新建基于单文档的应用程序; (2)用类向导映射鼠标右键消息; (3)在消息函数中添加代码:MessageBox(“您按下了鼠标右键”);
3、.利用AppWizard生成默认的SDI应用程序My时,向导自动生成的哪四个类?及其相应的功能。 参考答案:
CMainFrame(构建应用程序,显示窗架) CMyApp(整个应用程序) CMyDoc(管理数据) CMyView(显示数据) 4.创建窗口的五个步骤: 参考答案:
1)定义窗口 2)注册窗口 3)创建窗口 4)显示窗口 5)消息循环 5.如何显示和更新窗口?
答:调用函数ShowWindow显示窗口,调用函数UpdateWindows更新窗口。 6.什么是消息循环?
答:在创建了窗口的应用程序中,应用程序将不断地从消息队列中获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列获取消息,这个不断重复的工作过程叫做消息循环。
7.说明Windows应用程序的主函数、窗口函数与Windows系统之间的关系。
答:Windows应用程序的主函数和窗口函数都是系统调用的函数,主函数是在应用程序启动时由系统首先调用的函数,而窗口函数是主函数在消息循环中获得消息并把消息派送给系统之后,由系统调用的用来处理消息的函数。 8.文档类的成员函数UpdateAllViews的作用是什么?
答:通知文档所对应的所有窗口同时进行重绘。 9.MFC应用程序的界面有哪三种方式?
答:(1)单文档界面;(2)多文档界面;(3)基于对话框界面。 10.WinMain()函数的工作。
第9页
WinMain()函数是Windows程序的入口点 在WinMain中进行注册窗体类、建立窗体、显示窗体、更新窗体、建立消息循环 11.非MFC的Windows程序中,WM_PAINT消息中怎样获得客户区的设备环境句柄。和不是WM_PAINT消息中怎样获得客户区的设备环境句柄。
BeginPaint ----------EndPaint GetDC---------------ReleaseDC(成对出现) 利用GetDC函数获取设备环境句柄 12.句柄的含义。
句柄是一个通常为32位的无符号整数(unsigned int),它代表一个内核对象,是内核对象在应用层的表示。
13.在MM_TEXT映射模式下,什么情况下客户坐标和逻辑坐标可能不同。
当窗口客户区有滚动条时客户坐标和逻辑坐标可能不同 14.GetMessage()函数在什么情况下返回0
在接收到WM_QUIT消息时返回0
15.Windows中应用程序的输出是怎样进行的。
通过设备描述表DC(Device Context)来进行应用程序与物理设备之间的交互 16.当程序中某个函数改变了数据而需要重WM_PAINT不会被自动调用,这时需要怎样间接调用它。
使用InvalidateRect()调用
17.键盘消息处理函数OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)中的主要参数。
参数UINT nChar指按下按键的虚拟键码;nRepCnt 按键按下的次数; nFlags有没有其他键同时被按下;如shift、ctrl、Alt 18.DC中的SetROP2()的作用。
设定绘图模式
19.扩展名为.rc的文件是什么。
资源文件
20.GDI绘图函数所使用的参数。
GDI绘图函数使用的逻辑坐标
21.当用户按下某个字母键时消息发生的顺序。
WM_KEYDOWN->TranslateMessage()->WM_CHAR 22.常用的客户区鼠标消息有哪些
WM_LBUTTONDBCLK 双击鼠标左键 WM_LBUTTONDOWN 按下鼠标左键 WM_LBUTTONUP
释放鼠标左键 WM_MOUSEMOVE 移动鼠标 WM_RBUTTONDBCLK 双击鼠标右键 WM_RBUTTONDOWN 按下鼠标右键 WM_RBUTTONUP 释放鼠标右键 23.什么样的窗口才能接收键盘消息
Windows有活动窗口
24.键盘消息分为哪几类(WM_KEYDOWN,WM_KEYUP)
Windows中规定只有具有输入焦点的窗口才能接收键盘消
只产生按键消息 WM_SYSKEYDOWN,WM_SYSKEYUPWM_CHAR,WM_DEADCHAR
WM_SYSCHAR,WM_SYSDEADCHAR
系统按键消息只能产生非系统的字符消息。在Windows中一些键是只产生按键消息而不产生
Shift键、Ctrl键、功能键、光标移动键、特殊字符键。
25.焦点。
WM_SETFOCUS
WM_KILLFOCUS
个窗口进行操作。
26.在 WNDCLASSEX 结构类型中,各个成员所代表的含义是什么?
第10页
Windows程序设计题(含简答题答案)



