一、单项选择题:1.WinMain()函数的工作。
WinMain()函数是Windows程序的入口点在WinMain中进行:注册窗体类、建立窗体、显示窗体、更新窗体、建立消息循环2.非MFC的Windows程序中,不是处理WM_PAINT消息的时候怎样获得客户区的设备环境句柄。
BeginPaint ----------EndPaintGetDC---------------ReleaseDC(成对出现)利用GetDC()函数获取设备环境句柄3.句柄的含义。
句柄是一个(通常为32位的)无符号整数(unsigned int),它代表一个内核对象内核对象在应用层的表示4.在MM_TEXT映射模式下,什么情况下客户坐标和逻辑坐标可能不同。
当窗口客户区有滚动条时客户坐标和逻辑坐标可能不同5.Windows程序的控制流程。
Windows程序没有固定的控制流程,事件驱动程序控制流程6.事件驱动、消息驱动的概念。
事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。
消息是事件到达Windows内部后的称呼7.对话框、控件的作用。
对话框是程序与用户之间进行交互,接收用户输入、并把数据显示出来的一个窗口;控件是用户可与之交互以输入或操作数据的对象。
控件通常出现在对话框中或工具栏上。
8.MFC中怎样处理WM_PAINT消息。
在OnDraw()函数中处理该消息9.GetMessage()函数在什么情况下返回0,从而导致消息循环终止,程序结束。
在接收到WM_QUIT消息时返回010.Windows中,应用程序的输出是怎样进行的。
通过设备描述表DC(Device Context)来进行应用程序与物理设备之间的交互11.MFC中,大多数类的基类都是什么。
CObject类12.一个MFC应用程序必须有且只能有一个从哪个类派生的全局应用程序对象,此对象在运行时刻控制应用程序中所有其他对象的活动。
CWinApp类13.每次当窗口客户区需要重新绘制时,应用程序框架怎么处理。
发送WM_PAINT消息,调用OnDraw()函数进行重绘14.CDC类的作用。
CDC是设备描述表类的基类,除了一般的窗口显示外,还用于基于桌面的全屏幕绘制和非屏幕显示的打印机输出。
15.当程序中某个函数改变了数据而需要重新绘制客户区时,OnDraw()函数不会被自动调用,这时需要怎样间接调用它。
使用Invalidate()调用16.Invalidate()要重绘整个窗口客户区,当数据更新很快时,这样会引起屏幕闪烁。
为了避免闪烁,可以怎样处理。
选择一个外包矩形,更新外包矩形,减少闪烁,使用InvalidateRect()重绘客户区中的指定区域17.关于颜色。
COLORREF 是一个32-bit 整型数值,它代表了一种颜色。
你可以使用RGB 函数来初始化COLORREF。
如:COLORREF color=RGB(0,255,0);18.匈牙利命名法的常用规则。
匈牙利命名法常用前缀:指针:p句柄:h长整型:l布尔:b浮点型(有时也指文件):f双字:dw字符串:sz短整型:n双精度浮点:d字符:ch(通常用c)整型:i(通常用n)字节:by字:w无符号:u19.键盘消息处理函数OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)中的主要参数。
参数UINT nChar指按下按键的虚拟键码nRepCnt 按键按下的次数nFlags 有没有其他键同时被按下(shift、ctrl、Alt、、、、、、)20.设置定时器函数SetTimer(UINT nIDEvent,UINT nElapse,void *lpfnTimer)中的主要参数。
参数UINT nElapse指发送WM_TIME消息的时间间隔,单位为毫秒设置定时器的步骤:在需要使用的地方SetTimer,对OnTimer自定义函数进行消息编写,适当地方KillTimer21.CDC类中怎样选用库存GDI对象。
GetStockObject()(P188)22.当创建了自己定义的画笔、画刷等GDI对象后,怎样将其选进设备环境。
CDC::SelectObject()23.CDC类的成员函数SetROP2()的作用。
设定绘图模式24.扩展名为.rc的文件是什么。
资源文件25.文档/视图结构的分工。
文档相当于数据容器,视图相当于查看数据的窗口或是和数据发生交互的窗口。
(一个完整的应用一般由四个类组成:CWinApp应用类,CFrameWnd窗口框架类,CDocument文档类,CView视类。
)27.视图类怎样获得文档类的指针。
CView::GetDocument()28.以模态方式显示对话框的方法。
CDialog::DoModal()29.MFC中怎样获得应用程序类对象的指针。
AfxGetApp( )30.在OnDraw()函数以外的函数中,怎样在客户区中显示数据。
使用CClientDC类创建客户区的设备环境句柄,如:CClientDC dc(this)29.GDI绘图函数所使用的参数。
GDI绘图函数使用的逻辑坐标30.GetClientRect()函数所获得的矩形是用什么坐标来表示的。
客户坐标31.如果要创建宽度大于1的虚线画笔,则在创建画笔时一定要使用什么画笔类型。
PS_GEOMETRIC32.关于串行化的问题。
需使用一个类型为CArchive的归档对象充当磁盘文件与程序中的对象的中介33.当用户按下某个字母键时,消息发生的顺序。
WM_KEYDOWN->TranslateMessage()->WM_CHAR34.关于窗口客户区变为无效的问题。
窗口客户区变为无效时会发送WM_PAINT消息调用OnDraw()进行重绘35.当一个类中要使用另外一个类时,一定要先使用#include将什么包含进来。
需要将要使用的类的头文件包含进来36.MFC程序中,怎样从视图类中获得主框架类对象的指针。
操作状态栏调用CVIEW::GetParentFrame()二、多项选择题:1.一个窗口由哪些部分组成。
标题栏,菜单zz栏,工具栏,客户区,状态栏2.窗口的框架包括哪些部分。
标题栏、菜单栏、最大化按钮、最小化按钮、关闭按钮、滚动条“客户区边框”3.Windows程序的资源包括哪些。
Windows资源包括图表、菜单、热键、对话框、光标、字符串、位图4.坐标的分类问题。
设备坐标(DP)、客户坐标(Client)、逻辑坐标(LP)8.根据消息来源的不同,Windows消息分为哪些种类。
系统消息、用户消息9.使用定时器的步骤有哪些。
1、调用SetTimer(m_hWnd,1,1000,NULL);设置定时器2、添加ON_WM_TIMER()消息映射宏3、添加OnTimer()消息响应函数4、KillTimer()移除定时器10.设备环境的信息有哪些。
设备上下文(设备环境)是一种包含有关某个设备(如显示器或打印机)的绘制属性信息的Windows 数据结构。
所有绘制调用都通过设备上下文对象进行,这些对象封装了用于绘制线条、形状和文本的Windows API。
11.GDI对象的概念。
GDI(Graphics Device Interface)即图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
12.文档/视图结构的适用情况。
不适用于数据量少、非标准窗口的程序13.哪些类中可以使用串行化操作(即Serialize()函数)。
从CObject继承而来的类、CDocument及其派生类、CObArray、CObList14.自定义的CObject派生类,要使用串行化操作,必须添加哪两个宏。
在类声明文件中使用DECLARE_SERIAL宏在类实现文件中使用IMPLEMENT_SERIAL宏15.对话框的种类。
模态对话框、非模态对话框三、判断题:1.当向客户区输出时,哪些应用程序能向该客户区输出。
只有程序自身可以向该客户区输出2.Windows程序的控制流程问题。
无固定的流程3.Windows程序中除了能使用系统提供的标准消息,还允许程序员自己定义消息吗。
允许4.面向对象程序设计中,怎样放置类。
可放置在任意文件中5.CDC类的成员函数MoveTo()的作用。
把当前位置移动到指定点处6.Windows应用程序的窗口中,默认的逻辑坐标系统是怎样的。
在MM_TEXT模式下,若无滚动条或滚动条位于左上方,则逻辑坐标与客户坐标一致,均是以像素为单位,以窗口的左上角为坐标原点;若滚动条移动则两者的数值不一致7.CWnd类的成员函数GetClientRect()的作用。
获取窗口客户区的坐标8.视图类是否有自己的边框。
无9.保存和载入串行化的数据是通过什么作为中介来完成的。
CArchive类四、程序题:1.主控函数WinMain()建立消息循环的代码。
While(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispathMessage(&msg);}2.绘图程序案例的第2个版本中,视图类OnDraw()函数怎样进行处理。
void CDraw1View::OnDraw(CDC* pDC){CDraw1Doc* pDoc = GetDocument(); //获取文档类的指针ASSERT_V ALID(pDoc); //判断指针是否为NULL,如果是则要报错// TODO: add draw code for native data herePOSITION pos=pDoc->m_Graphs.GetHeadPosition(); //获取文档类中存放图形的链表的头位置//逐个取得链表中每个图形的指针,并调用其Draw()虚函数进行绘制while(pos!=NULL){CGraph *p=(CGraph *)(pDoc->m_Graphs.GetNext(pos));p->Draw(pDC);}}3.绘图程序案例的第4个版本中,以直线类为例,怎样修改它的Draw()成员函数,以便用指定的画笔进行绘制。
void CLine::Draw(CDC *pDC){//下面4条语句演示了创建一个自定义画笔的方法LOGBRUSH logBrush;logBrush.lbStyle = BS_SOLID;logBrush.lbColor = m_nPenColor;CPen NewPen(m_nPenStyle | PS_GEOMETRIC, m_nPenWidth, &logBrush), *pOldPen; //要实现宽度大于1的非实线画笔,就必须把类型指定为PS_GEOMETRIC pOldPen=pDC->SelectObject(&NewPen); //将创建的GDI对象选入设备环境pDC->MoveTo(m_StartPoint);pDC->LineTo(m_EndPoint);pDC->SelectObject(pOldPen); //恢复原来的GDI对象}。