第六篇
4-1 Visual C++ IDE提供了哪些类型的程序向导?最常用的向导有哪几个? 答(1)
ATL COM APPWizard
Clurster Resource Type Wizard Custom Appwizard
Datebase Project:创建数据库项目
MFC ActiveX Control Wizard:创建基于MFC的ActiveX控件 MFC AppWizard[dll]:创建基于MFC的动态链接库
MFC AppWizard[exe]:创建基于MFC的应用程序(最常用)
New Database Wizard:在SQL服务器上创建一个SQL Server数据库
Win32 Application:创建Win32应用程序,可不使用MFC,采用SDK方法编程 Win32 Console Application:创建DOS下的Win32控制台应用程序,采用C++或C语言进行编程
Win32 Dynamic-link Library:创建Win32动态链接库,采用SDK方法 Win32 Static Library:创建Win32静态链接库,采用SDK方法 (2) MFC AppWizard[exe]:创建基于MFC的应用程序(最常用)
4-2 MFC AppWizard[exe]向导建立一个SDI应用程序时,如何进一步设置程序界面窗口的边框厚度和最小化,最大化,关闭按钮? 答:(1)
编写一个实现具体功能的MFC应用程序的步骤
1. 根据应用程序特性在MFC AppWizard[exe]应用程序向导各步骤对话框中
进行选择,创建一个应用程序的框架。
2. 利用资源编辑器为程序编辑或添加资源,如编辑菜单、添加对话框等。 3. 利用ClassWizard类向导或手工添加类、成员变量和成员函数的声明。 4. 根据需要编写具体的函数代码。 5. 编译、链接程序。如果程序有语法错误,需要修改源程序。直到没有编译、
链接错误,才能得到可执行程序。
6. 测试应用程序各项功能,如果程序没有实现程序设计所要求的功能,启动
Debug调试器进行调试,找出并修改程序设计中的逻辑错误。 (2)略.
4-4 Workspace窗口的ClassView页面中类成员左边的小图标具有什么含义? 答:分别表示:
公有,私有,保护成员变量及公有,私有,保护成员函数 4-5 利用Visual C++编写Windows应用程序可以采取哪些方法?编写一个MFC应用程序一般有哪几个步骤?简述向项目添加一个资源的方法. 答(1)
利用Visual C++编写Windows应用程序可以采取几种不同的途径: ? 利用 Win32应用程序接口API(Application Programming Interface)
提供的函数,用C或C++语言编写程序。
? 由于MFC通过类对API的绝大部分功能进行了封装,可以利用MFC,用
C++语言编写程序。 (2)
? 根据应用程序特性在MFC AppWizard[exe]应用程序向导各步骤对话框中进行选择,创建一个应用程序的框架。
? 利用资源编辑器为程序编辑或添加资源,如编辑菜单、添加对话框等。
? 利用ClassWizard类向导或手工添加类、成员变量和成员函数的声明。
? 根据需要编写具体的函数代码。
? 编译、链接程序。如果程序有语法错误,需要修改源程序。直到没有编译、链接错误,才能得到可执行程序。
? 测试应用程序各项功能,如果程序没有实现程序设计所要求的功能,启动Debug调试器进行调试,找出并修改程序设计中的逻辑错误。 (3) 打开Insert菜单,选择Resource菜单项,出现Insert Resource对话框,如下图所示,在Resource Type框中选择一个资源类型,单击New按钮即可向项目添加一个资源。
4-8 MFC AppWizard[exe]向导为SDI应用程序创建了哪几个类?它们的基类分别是哪个?这些类分别完成什么程序功能? 答:
CMainFrame类是MFC的CFrameWnd类的派生类,它主要负责创建标题栏、菜单栏、工具栏和状态栏。
CMysdiDoc。CMysdiDoc类是MFC的CDocument类的派生类,它主要负责应用程序数据的保存和装载,实现文档的序列化功能
CMysdiView类是MFC的CView类的派生类,它主要负责客户区文档数据的显示,以及如何进行人机交互。
CMysdiApp类是MFC的CWinApp类的派生类,它主要负责完成应用程序的初始化、程序的启动和程序运行结束时的清理工作。
4-10 在SDI应用程序中,如何进行文档对象成员变量的初始化工作?在视图类成员函数中如何获取当前文档对象的指针?如何访问文档对象的数据? 答:
SDI应用程序不要在构造函数中进行文档对象成员变量的初始化,而应在OnNewDocument()函数中
GetDocument():用于获取当前文档对象的指针m_pDocument。
第七篇
5-1 什么是文档?什么是视图?请说明文档/视图结构应用程序的界面风格? 答:文档是是MFC应用程序中所处理数据的集合,包括文本、图形、图象和表格数据
视图是文档在屏幕上的一个映像.
文档/视图结构应用程序是一个标准的Windows程序,除了具有标准的窗口和界面元素外,还提供了一个专门的数据显示区称为客户区.
5-3 文档,视图和应用程序框架之间如何相互作用?通过哪几个主要的成员函数完成文档和视图之间的相互交互?
答: 文档与视图的交互是通过类的公有成员变量和成员函数实现的。 视图类的成员函数GetDocument()
CDocument类的成员函数UpdateAllViews() 视图类的成员函数OnUpdate() CWnd的类成员OnPaint() CVIEW的成员函数OnDraw()
5-10 菜单命令可以映射到哪些类?当将一个菜单命令同时映射到不同类的成员函数时,映射有效的顺序是怎要的?
答: 从类CCmdTarget派生出来的类都可以加入应用程序的消息循环. 其优先级为: 视图类->文档类->框架窗口类
5-13 鼠标消息分为哪2类?常用的鼠标消息有哪几个?鼠标消息处理函数一般都有哪2个函数参数?在编程时这些参数有什么用? 答:客户区鼠标消息 非客户区鼠标消息: 主要鼠标消息:
WM_MOUSEMOVE:移动
WM_LBUTTONDOWN:按下左键 WM_LBUTTONUP:释放左键 WM_RBUTTONDOWN:按下右键 WM_RBUTTONUP:释放右键
WM_LBUTTONDBLCLK:双击左键 一般都有两个参数:
nFlags:类型为UINT,表示鼠标按键和键盘上控制键的状态。 point:类型为CPoint,表示鼠标当前所在位置坐标。
第八篇:
5-8 菜单的属性有哪些?如何建立菜单?简述添加菜单命令处理函数的方法? 答: Pop-up;Seperator;Checked;Grayed;Inactive;
1.利用MFC AppWizard[exe]向导创建应用程序。在项目工作区的
ResourceView页面中选择Menu并展开它,双击下面的IDR_MAINFRAME项弹出菜单资源编辑器,显示应用程序向导所创建的菜单资源。
2.为程序添加主菜单。双击菜单栏右边虚空白框,弹出属性对话框,在Caption框输入主菜单的标题,
3.在主菜单下方双击带虚框的空白菜单项,弹出属性对话框。在ID栏输入ID号。在Caption框输入菜单项的标题。
利用ClassWizard类向导添加菜单命令WM_COMMAND消息处理函数后,向导将自动添加一个如下格式消息映射:
ON_COMMAND(MenuItemID, MemberFuntion)
其中参数MenuItemID是菜单项的ID标识,参数MemberFuntion是处理该消息的成员函数名。一个菜单项的WM_COMMAND消息意味着选择了该菜单项,或选择了对应的工具栏按钮、键盘快捷键.同时向导还生成了消息处理函数的框架代码,在其中添加处理消息的代码.
5-12 何谓弹出式菜单?它是由什么消息引发的?哪个一MFC类用来处理菜单?简述添加弹出式菜单的方法?
答: 浮动的弹出式菜单,也称快捷菜单,上下文菜单,当用户单击鼠标右键,弹出式菜单出现在光标所在位置。 由鼠标消息引发的.
弹出式菜单是通过利用CMenu类和其成员函数,在程序运行过程中动态建立的。
利用ClassWizard为视图类添加WM_CONTEXTMENU的消息处理函数,添加如下代码:
void 类名::OnContextMenu(CWnd* pWnd,
CPoint point) { CMenu menuPopup; // 声明菜单对象
if (menuPopup.CreatePopupMenu()) // 创建弹出式菜单
{ 1.向菜单menuPopup中添加菜单项,函数AppendMenu()用于向菜单menuPopup添加菜单项,函数第1个参数指定加入菜单项的风格,值MF_STRING表示菜单项是一个字符串;第2个参数指定要加入菜单项的ID,如ID_COIN_ADD;第3个参数指定菜单项的显示文本。
2.显示弹出式菜单,并跟踪用户的菜单项的选择,函数TrackPopupMenu()用于在指
定位置显示弹出式菜单,并响应用户的菜单项选择。函数第1个参数是位置标记,
TPM_LEFTALIGN表示以x坐标为标准左对齐显示菜单;第2、3个参数指定弹出式菜单的屏幕坐标;第4个参数指定拥有此弹出式菜单的窗口。 }}
5-14 在程序中如何捕获鼠标?如何释放鼠标?
答: 系统中任一时刻只有当前窗口才能捕获鼠标。在程序中需要时通过调用函数
CWnd::SetCapture()捕获鼠标,使用鼠标画图结束后应该调用函数ReleaseCapture()释放鼠标。
5-16 什么是类模板? 使用MFC类模板必须包含哪个头文件?
答: 类模板实际上是函数模板的推广,它是一种不确定类的某些数据成员的类型或成员函数的参数及返回值的类型的类。
使用MFC类模板,需此头文件: #include
5-20 在MFC应用程序框架中,为了实现状态栏的功能,在哪个类中,定义了一个什么样的成员变量?请说明静态数组indicators的组成和功能?
答:利用MFC AppWizard向导创建应用程序时,在CMainFrame类中定义了一个成员变量m_wndStatusBar,它是状态栏CStatusBar类的对象。 static UINT indicators[ ] = {
ID_SEPARATOR, // 定义分隔符,作为提示信息行的面板标识 ID_INDICATOR_CAPS, // 大写指示器面板标识 ID_INDICATOR_NUM, // 数字指示器面板标识 ID_INDICATOR_SCRL, // 滚动指示器面板标识 };
该数组每个元素代表了状态栏上一个指示器面板的ID值,这些ID值在程序的串表资源String Talbe有说明.可通过增加新的ID标识来增加用于显示状态信息的指示器面板. 需要在状态栏上显示的各指示器面板的标识及标识的个数也由该数组决定.