VC练习题(网上收集)
zhangtaolmq
VC习题1
1.2 下列对于WinMain函数的描述中,错误的是( C )。
A)WinMain函数的名称是固定的
B)WinMain函数是Windows程序的入口点
C)WinMain函数不能有参数
D)窗口函数与WinMain的关联是通过窗口类的注册实现的
1.3 以下四个特性中哪一个不属于面向对象的三大特性( A)。
A)封装性 B)多态性 C)抽象性 D)继承性
1.4 下列关键字中哪一个不是用于类的访问控制的( B )。
A)public B)friend C)private D)protected
1.5 下面四个MFC类中哪一个是管理MFC应用程序的( A)。
A)CWinApp B)CMainFrame C)CDocument D)CView
1.6 下列类中不属于MFC框架基本类的是(D )。
A)CWinApp B)CFrameWnd C)CView D)CObject
1.7 传统的软件开发主要采用 过程 驱动的方法,而Windows程序的开发使用消息 驱动模型,该模型靠事件机制来实现其功能。
1.8 主框架类是应用程序中负责控制菜单、工具栏和状态栏等界面元素的最主要的类。
习题2
2.1 Windows 应用程序的消息来源主要包括 输入消息、控制消息和系统消息、用户消息
2.2 SendMessage 向CWnd对象发送一个消息,直到这条消息被处理之后才返回
PostMessage 将一条消息放入应用程序的消息队列,然后不等窗口处理这条消息直接返回
2.3 CCmdUI类的主要功能是主要用来更新命令用户接口的状态。如子菜单。工具栏上的按钮等 。
2.4 代码ON_UPDATE_COMMAND_UI(ID_TEST, OnUpdateTest)的功能是:将对ID_TEST的更新命令接口消息的处理映射到OnUpdateTest函数上。
2.5 CString类的功能是处理字符串,其Format函数的功能是格式化字符串 。
2.6 CTime类的功能是 处理日期时间,其Format函数的功能是将时间对象格式化为字符串
2.7 MessageBox函数的第一个参数表示 消息文字,第二个参数表示 标题文字,第三个参数表示 图标与按钮组合 。
2.8 在windows中,按下一个字符键,会依次触发WM_KEYDOWN WM_CHAR、和WM_KEYUP三个消息。
2.9 当Windows窗口内部需要重新绘制时,会得到一个 WM_PAINT 消息,当释放鼠标右键时,会得到一个 WM_RBUTTONUP 消息。
习题三
3.1 Visual C++提供的资源编辑器不能编辑下列哪个资源(C )。
A)菜单 B)工具栏 C)状态栏 D)位图
3.2 MFC应用程序框架为状态栏定义的静态数组indicators放在哪个文件中( A )。
A)MainFrm.cpp B)MainFrm.h C)stdafx.cpp D)stdafx.h
3.3 deletemenu用来删除某个菜单项,如果被删除的菜单项有相关的弹出菜单,则该弹出菜单的句柄也要被删除并释放内存。appendmenu用来追加某个菜单项, trackpopupmenu 用来在一个POINT结构所指定的位置显示一个上下文菜单。
3.4工具栏上的按钮能触发的消息 command和 update_command_ui。
3.5 状态栏上的窗格可以分为信息行窗格和 指示器窗格两类。
3.6 getsubmenu 可以得到指向某列菜单的指针。
3.7 下列函数中,可以实现画圆功能的是(B )。
A)Rectangle B)Ellipse C)Circle D)Line
3.8 CDC类为用户提供了下列四个文本输出函数,其中,能使输出的文本呈现一个多列列表格式的是(C )。
A)TextOut B)ExtTextOut C)TabbedTextOut D)DrawText
3.9下列类中哪一个不是GDI对象类(B )。
A)CPen B)CWnd C)Cbrush D)CRgn
习题四
4.1下面哪个不是CDC类的派生类( A )。
A)GDI类 B)CPaintDC类 C)CClientDC类 D)CWindowDC类
4.2 CDC类中实现绘制矩形功能的函数是 Rectangle,实现绘制椭圆功能的函数是 Ellipse,改变文本颜色的函数是 SetTextColo改变文本背景颜色的函数是 SetBkcolor在指定位置显示字符串的函数是 Textout 。
4.3 MFC绘图要素主要分为两大类,即 设备场景 和基本绘图工具 。
4.4 Windows引入图形设备接口的目的是屏蔽底层硬件的绘图细节,使编程更加容易 。
4.5 Windows用 COLORREF 类型的数据存放颜色,它采用3个参数表示红、绿、蓝三元基本色的分量值,这3个值的取值范围为 0~255 。
4.6 创建画笔后,必须调用CDC类的成员函数 SelectObject将新画笔选进当前的绘图环境。
4.7 MFC中的CDialog类封装了对话框的显示、关闭等常用功能,其中,用来显示模态对话框的是函数( C )。
A)CreateWindow B)ShowWindow C)DoModal D)UpdateWindow
4.8 对话框创建后,还没显示前就会触发( B )消息。
A)WM_PAINT B)WM_INITDIALOG C)WM_CREATE D)WM_SIZE
4.9 通用对话框中,属于非模态对话框的是(D)。
A)文件对话框 B)颜色对话框 C)打印对话框 D)查找对话框
习题五
5.1 要打开文件,应该使用哪个通用对话框( A )。
A)CFileDialog B)CColorDialog C)CPrintDialog D)CFontDialog
5.2 通常将对话框的初始化工作放在下列哪个函数中进行( C )。
A)OnOK B)OnCancel C)OnInitDialog D)DoModal
5.3所有通用对话框都是由公共基类CCommonDialog派生出来的, CColorDialog实现了标准的颜色对话框。
5.4 MFC中,与属性对话框相关的两个类是 CPropertyPage 和CPropertySheet
5.5下列控件中不属于按钮的是( B )。
A)下压按钮 B)列表框 C)单选框 D)复选框
5.6 如果在输入时采用选择的方法进行,以下哪个控件不能实现( D )。
A)列表框控件 B)单选按钮 C)复选框 D)编辑框
5.7 下面对UpdateData函数的描述中错误的是( D )。
A)CWnd::UpdateData函数实现对控件中数值的输入和读取
B)UpdateData只有一个为TRUE或FALSE的参数
C)当调用UpdateData(FALSE)时,数据由控件关联的变量向控件传输
D)当调用UpdateData(TRUE)时,数据由控件关联的变量向控件传输
5.8 有两种方法可以创建静态文本控件,一种是使用资源编辑器添加,另一种是 使用create函数动态创建。
5.9 使用滚动条控件一般要用到控件所在对话框类的WM_HSCROLL和 WM_VSCROLL 消息。
习题六
6.1 判断一组单选按钮中哪一个被选中了,要应用GetCheckedRadioButton 函数。
6.2 GetScrollpos函数可以得到滚动条的滑块位置, SetScrollpos函数可以设置滚动条的滑块位置, Getpos可以得到滑动条的当前位置, Setpos 函数可以设置滑动条的当前位置。
6.3 CListBox类中的 InsertString 函数可以为列表框插入一个新的字符串, ResetContent 函数可以清空所有列表项内容。
6.4当程序需要与界面交换数据时,应该调用 UpdataData 函数。
6.5 GetDocument 是视图类的成员函数,调用它可以得到指向与之关联的文档对象的指针,文档的串行化在Serialize 函数中进行。
6.6 在程序的任何一个类中访问应用程序类的函数为 AfxGetApp ,在程序的任何一个类中访问框架窗口类的函数为AfxGetMainWnd() 。
6.7基于单文档/视图结构的框架程序中包含的类有 CWinApp 、 CFrameWnd 、 CDocument、CDocTemplate和 Cview
6.8 ODBC体系结构中不包括下列哪个组件( C )。
A)ODBC管理器 B)数据源 C)驱动程序管理器 D)数据库管理系统DBMS
6.9 记录集可以分为 Dynaset(动态集) 和 Snapshot(快照)两种。
习题七
7.1 MFC的ODBC类主要包括5个类,分别是CDatabase、CRecordset 、 CRecordView 、 CDBException和 CFieldExchange 。
7.2可以利用CRecordset类的 AddNew函数添加一条新记录,利用CRecordset类的 MoveFirst函数将记录指针移动到第一条记录上,利用CRecordset类的Update 函数实现数据库记录的保存。
7.3下列函数中,能为状态栏第二个信息格设定文字的是( A )
a)SetPaneText b)SetWindowText c)SetPaneInfo d)SetText
简答题:
1. 定义和使用消息映射表的步骤 :
① 在头文件的类声明中添加DECLARE_MESSAGE_MAP宏声明消息映射;
② 在类的定义文件(.cpp)定义消息映射表,方法是在 文件的开始处添加BEIGN_MESSAGE_MAP和END_MESSAGE_MAP 这一对宏,在它们之间放置消息映射宏,定义并初始化消息映射表,在消息与处理消息的函数之间建立联系;
③ 在类的定义文件(.cpp)中添加消息处理函数。
2.什么是消息映射?
所谓消息映射,简单地讲,就是让程序员指定要某个MFC类(有消息处理能力的类)处理某个消息。MFC提供了工具ClassWizard来帮助实现消息映射,在处理消息的类中添加一些有关消息映射的内容和处理消息的成员函数。程序员将完成消息处理函数,实现所希望的消息处理能力。
如果派生类要覆盖基类的消息处理函数,就用ClassWizard在派生类中添加一个消息映射条目,用同样的原型定义一个函数,然后实现该函数。这个函数覆盖派生类的任何基类的同名处理函数。
3.创建一个窗口的步骤?
创建一个完整的窗口需要经过下面四个操作步骤
设计一个窗口类;
注册窗口类;
创建窗口;
显示及更新窗口。
4.什么是模态对话框?什么是非模态对话框?
所谓“模态对话框”是指对话框被弹出后用户必须在对话框中作出相应的操作;在退出对话框之前,会阻止其他应用程序的运行(包括它所在的应用程序)
所谓“非模态对话框”是指当对话框被弹出后,将一直保留在屏幕上,但不影响其他应用程序的运行,用户可以继续在对话框所在的应用程序中进行其他操作;当需要使用对话框时,只需像激活一般窗口一样单击对话框所在的区域即可。例如在Microsoft Word中的“查找”和“替换”对话框。
5.文档/视图结构的工作机制
l 视图通过GetDocument成员函数获得指向相关联的文档对象的指针
l 通过该指针调用文档类的成员函数来从文档中读取数据
l 视图把数据显示于计算机屏幕上
l 用户通过与视图的交互来查看数据并对数据进行修改
l 视图通过相关联的文档类的成员函数将经过修改的数据传递给文档对象
l 文档对象获得修改过的数据之后,对其进行必要的修改,最后保存到永久介质(如磁盘文件)中
6.从CDocument类派生新的文档类的一般过程如下:
为每一个文档类型从CDocument类派生一个相应的文档类。为文档类添加成员变量,这些变量主要用来保存文档的数据,并使其它的对象(如视图对象)可以访问这些成员变量,从而实现文档和视图的相互搭配使用。重载Serialize成员函数,实现文档数据的串行化。
7. 串行化的好处
使用串行化的好处:是不需要重载文件打开、文件保存之类的方法,MFC框架会自动完成这些任务,并自动调用文档类的Serialize方法来完成串行化过程。
如果文档的抽象数据只有一个字符串,那么你只需要在Serialize中添加相映语句就可以完成串行化过程。
8、简述在MFC Windows应用程序中使用CBrush对象的基本步骤。
l 创建画刷(可调用画刷创建函数CreateSolidBrush、CreateHatchBrush)
l 将画刷选入设备环境(调用SelectObject)
l 使用该刷子进行绘画
l 删除画刷
9、简述文档/视图结构中包含的主要的类及各个类之间的相互关系。
包括 CWinApp、 CDocument 、CView、 CDocTemplate 、 CFrameWnd 类
一个 App可以包含多个文档模版( CDocTemplate ),但是 MFC AppWizard (无论是 SDI 还是 MDI )都只是默认生成一个。但是在实际开发中一个文档模版不够,需要自己手工添加。这个结构是通过 MFC 中 CWinApp 的成员变量 CDocManager * m_pDocManager 实现的。
CDocTemplate 拥有 3 个成员变量,分别保存着 Document 、 View 、 Frame 的 CRuntimeClass 指针,另外持有成员变量 m_nIDResource ,用来指定这个 Document 显示时候采用的菜单资源。
一个文档可以有多个视图,由 Document 中成员变量 CPtrList m_ViewList 维护。
CFrameWnd 拥有一个成员变量 CView* m_pActiveView 指向当前活动的 View。
CView 中拥有一个成员变量 CDocument* m_pDocument 指向该视图相关的 Document。
10、写出按钮Show和Show the Age响应单击消息的函数OnEnable()、OnShow()和OnShowage()。函数OnShow()使编辑框IDC_EDIT1和IDC_EDIT2处于显示状态,函数OnShowage()要能够判断出单选按钮IDC_RADIO1、IDC_RADIO2和IDC_RADIO3哪个被选中,并将被选中单选按钮的标题添加到组合框IDC_COMBO1中,设为组合框的默认选项。
CMyDialog::OnEnable()
{
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);
}
CMyDialog::OnShow()
{
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
}
CMyDialog::Onshowage()
{
CString strText;
int i=-1;
i=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);
if(i==IDC_RADIO1)
strText=">20";
else if(i==IDC_RADIO2)
strText="15-20";
else if(i==IDC_RADIO3)
strText="<15";
GetDlgItem(IDC_COMBO1)->SetWindowText(strText);
}
2、下面左图为菜单结构,右图为运行结果,写出弹出菜单的代码。
void CPopupmenuView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menuPopup ;
if(menuPopup.LoadMenu(IDR_MAINFRAME))
menuPopup.GetSubMenu (4)->TrackPopupMenu (TPM_LEFTALIGN | TPM_RIGHTBUTTON , point.x , point.y , this);
}