使用ClassWizard设计类

合集下载

MFC中的多线程问题

MFC中的多线程问题

3 多线程的调度和处理在32 位Windows 环境下,开发多线程应用程序可以利用提供的Win32 API 接口函数,也可以利用VC++ 中提供的MFC类库进行开发。

两种方式对于多线程编程原理是一样的,用户可以根据需要选择相应的工具。

下面以利用MFC 类库实现多线程调度与处理为例,介绍多线程的实现方法以及多个线程间任务调度所应注意的一些关键技术。

3.1 基于MFC的多线程设计在VC++6.0环境下,MFC类库提供了对多线程编程支持,使得多线程能方便的实现。

MFC区分两种类型的线程:辅助线程(Worker Thread)和用户界面线程(UserInterface Thread)。

辅助线程没有消息机制,通常用来执行后台计算和维护任务。

MFC 为用户界面线程提供消息机制,用来处理用户的输入,响应用户产生的事件和消息。

但对于Win32 的API 来说,这两种线程并没有区别,它只需要线程的启动地址以便启动线程执行任务。

用户界面线程的一个典型应用就是类CWinApp,类CwinApp是CWinThread 类的派生类,应用程序的主线程是由它提供,并由它负责处理用户产生的事件和消息。

类CwinThread 是用户接口线程的基本类。

CWinThread 的对象用以维护特定线程的局部数据。

因为处理线程局部数据依赖于类CWinThread,所以所有使用MFC 的线程都必须由MFC 来创建。

3.2 多线程的创建及涉及的关键问题要创建一个线程,需要调用函数AfxBeginThread。

该函数通过参数重载可以实现辅助线程和用户界面线程的创建。

但不论是辅助线程还是用户界面线程,都需要指定额外的参数以修改优先级,堆栈大小,创建标志和安全特性等。

函数AfxBeginThread 返回指向CWinThread 类对象的指针。

创建助手线程相对简单,并不必须从CWinThread 派生一个类。

实现起来需要两步:实现控制函数和启动线程。

用vc++怎么制作表格

用vc++怎么制作表格

用vc++怎么制作表格展开全文制作VC表格控件要使用大量的表格,而Visual C++中并没有提供相应的表格控件,因此需要我们程序员自己制作,本文将介绍一个简单的表格控件的制作全过程。

其实,一张表格是由一系列的单元格排列在一个窗口中而构成的,所以,制作表格控件的最重要的一步是单元格类的设计。

从最简单的角度出发,通过改造编辑框(Edit Box)来制作单元格类是最容易也是最适合的,所以范例程序的重点是,从CEdit类中派生一个CCell类并对这个类做适当的修改。

在编写这个单元格类时,还要注意当用户操作单元格时,应当适当地改变单元格的外观,让用户感觉更直观。

我们利用AppWizard创建一个单文档程序项目,命名为CGridDemo。

利用ClassWizard加入两个新类:基类为CEdit类的CCell类和基类为CWnd类的CGridWnd类。

下面列出这两个类的主要代码://下面是CCell类的主要代码void CCell::OnSetfocus() //当用户操作单元格时,改变单元格的外观{ SetFocus=TRUE;//SetFocus为BOOL型的变量CDC* pDC=this-〉GetWindowDC();this-〉OnEraseBkgnd(pDC);//改变单元格外观 }BOOL CCell::OnEraseBkgnd(CDC* pDC) //改变单元格外观,重载OnEraseBkgnd函数{ RECT rect;CPen Pen;CBrush Brush;LOGBRUSH LogBrush;if(SetFocus==TRUE)//当用户操作单元格时,为单元格加上一个黑色边框{ Pen.CreatePen(PS_SOLID,2,RGB(0,0,0));//设置线条宽度为两个像素LogBrush.lbColor=RGB(0,0,0);LogBrush.lbStyle=BS_HOLLOW;Brush.CreateBrushIndirect(&&LogBrush);pDC-〉SelectObject(&&Pen);pDC-〉SelectObject(&&Brush);this-〉GetClientRect(&&rect);pDC-〉Rectangle(&&rect); //为单元格加黑色边框} else //当用户操作另外的单元格,消除黑色边框{ Pen.CreatePen(PS_SOLID,2,RGB(255,255,255)); //创建白色的Pen以覆盖边框LogBrush.lbColor=RGB(0,0,0);LogBrush.lbStyle=BS_HOLLOW;Brush.CreateBrushIndirect(&&LogBrush); pDC-〉SelectObject(&&Pen);pDC-〉SelectObject(&&Brush);this-〉GetClientRect(&&rect);pDC-〉Rectangle(&&rect); }return CEdit::OnEraseBkgnd(pDC); }void CCell::OnKillfocus()//用户焦点离开单元格,消除黑色边框{ SetFocus=FALSE;CDC* pDC=this-〉GetWindowDC();this-〉OnEraseBkgnd(pDC); }//下面是CGridWnd类的主要代码CGridWnd::CGridWnd(CWnd* pWnd,UINT nRow,UINT nCol) //CGridWnd类构造函数{ m_pParentWnd=pWnd;//父窗口句柄Row=nRow;//行数Col=nCol;//列数 }BOOL CGridWnd::Create()//重载Create函数,建立一个与父窗口同样大小的Grid窗口{ RECT rect;m_pParentWnd-〉GetClientRect(&&rect);return CWnd::Create(NULL, NULL, WS_CHILD|WS_VISIBLE, rect, m_pParentWnd, NULL,NULL); }BOOL CGridWnd::OnEraseBkgnd(CDC* pDC)//这个函数根据给出的行、列数画出网格{ for(int i=0;i〈Row+1;i++) //变量Row和Col是要创建的表格的行列数{ pDC-〉MoveTo(0,i*24);//网格大小为104×24pDC-〉LineT o(Col*104,i*24); }for(int j=0;j〈Col+1;j++){ pDC-〉MoveTo(j*104,0);pDC-〉LineT o(j*104,Row*24); }return TRUE; }int CGridWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)//将单元格放到画好的网格中{ RECT rect;for(int i=0;i〈Row;i++)for(int j=0;j〈Col;j++){ Cell[i]=new CCell(); //根据每行、列的网格数生成相应的单元格rect.top=i*24+2; //设定每个单元格大小为100×20,并确定单元格所在位置rect.left=j*104+2;rect.bottom=rect.top+20;rect.right=rect.left+100;Cell[i]-〉Create(WS_CHILD|WS_VISIBLE,rect,this,0); //在网格中放入单元格 }return 0; }//下面的代码演示使用表格窗口的方法void CGridDemoView::OnDraw(CDC* pDC){ CGridDemoDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(!Flags){ Grid=new CGridWnd(this,5,5); //建立一个5行5列的表格Grid-〉Create();Flags=TRUE; } }。

C++课后习题

C++课后习题

C++课后习题第一章1.选择题(1) 应用程序向导AppWizard的作用是,通过类向导可以增加消息映射和成员变量。

(2) 项目工作区窗格一般在集成开发环境的左侧,他展示一个项目的几个方面,他们分别是类视图、资源视图和文件视图。

(3)用户可以通过项目工作区窗格的资源视图来查看资源。

(4)项目工作区文件的扩展名为.dsw(5)菜单选择可以通过两种方法来进行:一种是鼠标选择;另一种是键盘选择(6)编译程序的快捷键是Ctrl+F7 ,链接程序的快捷键是F7 ,运行程序的快捷键是Ctrl+F5(7)编译微型条工具栏最右边按钮的功能是Insert/Remove Breakpoint(8)快捷键或菜单及相关资料符号的前缀是IDR2.选择题(1)用应用程序向导AppWizard创建C++源文件,应选择(A )选项卡。

A.FilesB.ProjectsC.WorkspacesD.Other Documents(2)项目文件的扩展名( B )。

A. .exeB. .dspC. .dswD. .cpp(3)Standard 工具栏中最左边按钮与(C )菜单命令的功能一样。

A.NewB.New FileC.New Text FileD.New Workspace(4)Windows资源提供的资料编辑器不能编辑(C )。

A.菜单B.工作栏C.状态栏D.位图3.判断题(1)通过应用程序向导AppWizard建立的程序不能被立即执行。

(×)(2)打开一个项目,只需打开对应的项目工作区文件。

(√)(3)用户可以通过选择T ools | Customize菜单命令设置集成开发环境的工具栏。

(√)(4)在同一项目中,Visual C++在内部用来标识资源的资源符号不能重复。

(√)(5)在Windows环境下,资源与程序源代码紧密相关。

(×)4.简答题(1)什么是项目?它是由什么组成的?(2)解释项目工作区中各个视图的功能。

可视化程序设计期末复习

可视化程序设计期末复习

一、选择题1. 从下列选项中,选择可视化的软件开辟工具。

A、C 语言C、C++D、ABC 都是2. VC++面对对象的设计方法中,新类继承了现有类的特性,我们称之为类的。

A.封装 B.抽象D.多态性3. VC++是支持的程序设计语言。

A、仅面对对象B、仅面对过程D、都不正确4. 面对对象的设计方法中,把每一个对象的数据和操作包装在一个类中,称之为类的。

B.抽象 C.继承 D.多态性5. 设 time 为一个类,从下列函数名中,选出 time 的析构函数。

A.time_show B.show C.6. 设 time 为一个类,从下列函数名中,选出 time 的构造函数。

A.time_show B.D.~time7. 创建基于 API 的应用程序,应选择项目类型。

A.MFC B.CLR C.8.采用重新绘制的方法刷新窗口,选择设备描述表。

A.CClientDC B.D.都可以9. 创建 MFC 应用程序,选择项目。

B.CLR C.ATL D.Win3210.采用记录事务的方法刷新窗口,选择设备描述表。

B.CWindowDC C.CPaintDC D.都可以11. 全部的控件都是类的派生类。

A.CView B.CDocument C.12. 设类名为“CA”,用来描述 CA 的对象的语句是。

A.CA ::Show B.D.Show :CA13. 设类名为“CA”,用来描述 CA 的成员函数的语句是。

B.Show CA C.CA Show D.Show :CA14. 设类名为“CA”,用来描述 CA 的派生类的语句是 D 。

A.CA ::Show B.Show CA C.15. VC++程序设计中,类的构造函数放在中。

B.头文件(.h) C.目标文件(.obj) D.可执行文件(.exe) 16. VC++程序设计中,类的定义放在中。

A.源文件C.目标文件(.obj) D.可执行文件(.exe) 17. VC++6.0 开辟环境的项目工作区中包括哪些视图。

Windows程序设计-大学模拟题(附答案)

Windows程序设计-大学模拟题(附答案)

《Windows程序设计》模拟题一,单选题1.所有的Windows应用程序都是由()驱动的.A.事件B.消息C.命令D.菜单[答案]:B2.一般应用程序不会派生自己的()类.A.主框架B.视图C.菜单D.文档[答案]:C3.MessageBox不能完成()功能.A.接收用户输入B.显示消息C.改变对话框标题D.显示问号图标[答案]:A4.Windows系统中的消息不包括().A.标准Windows消息B.控件消息C.命令消息D.视图消息[答案]:D5.()函数是从CView继承来的成员函数,用于刷新整个视图窗口屏幕.A.InvalidateB.MouseMoveC.PaintD.Brush[答案]:A6.菜单()消息,处理菜单状态的动态变化.A.UPDA TE_UIB.UPDATEMANDD.UPDA TE_COMMAND_UI[答案]:DmdUI类的常用成员函数()使菜单项前增加或清除√标志.A.SetCheckB.SetRadioC.SetTextD.Enable[答案]:A8.编辑菜单时为使字母下带下划线,应使用助记符().A.@B.#C.&D.$[答案]:CmdUI类的常用成员函数()使菜单项前增加或清除圆点标志.A.SetCheckB.SetRadioC.SetTextD.Enable[答案]:BmdUI类的常用成员函数()设置菜单项有效或无效.A.SetCheckB.SetRadioC.SetTextD.Enable[答案]:DmdUI类的常用成员函数()改变菜单项文本.A.SetCheckB.SetRadioC.SetTextD.Enable[答案]:C12.CDC的常用函数()可以绘制矩形.A.EllipseB.RectangleC.ArcD.Circle[答案]:B13.应用程序可以使用GDI创建3种类型的图形输出,不包括().A.矢量图形C.光栅图形D.文本[答案]:B14.CDC的常用函数()可以绘制内接矩形的圆.A.EllipseB.RectangleC.ArcD.Circle[答案]:A15.()函数用于在指定位置输出字符串.A.PrintB.TextOutC.ScanfD.Write[答案]:B16.在View的在普通成员函数体内用()获得设备环境.A.CDCB.CWindowDClientDClassDC[答案]:C17.创建画笔不需要给出()参数.A.风格B.宽度C.颜色D.长度[答案]:D18.实线画笔的风格应用()宏.A.PS_SOLIDB.PS_DASHC.PS_DOTD.PS_DASHDOT[答案]:A19.实心画刷只需要定义().A.填充样式B.填充颜色C.填充模式[答案]:B20.对话框()描述对话框的外观和控件布局,在资源描述文件中有对话框的定义.A.资源B.类C.模板D.数据[答案]:A21.调用对话框类的对象的方法,创建并显示模态对话框.A.Print()B.Create()C.DoModal()D.Show()[答案]:C22.CDialog中的()成员函数用于成员变量和控件之间的数据传递.A.ExchangeB.ToDoC.EXTD.UpdateData[答案]:D23.静态控件不包括().A.静态文本B.按钮C.静态图片D.组框[答案]:B24.()不是编辑框的消息.A.BN_CLICKEDB.EN_CHANGEC.EN_KILLFOCUSD.EN_SETFOCUS[答案]:A25.()设置进度条的当前位置.A.SetRangeB.SetStepC.SetPosD.StepIt[答案]:C26.()设置进度条范围.A.SetRangeB.SetStepC.SetPosD.StepIt[答案]:A27.()设置进度条填充步长.A.SetRangeB.SetStepC.SetPosD.StepIt[答案]:B28.()让进度条前进一个步长.A.SetRangeB.SetStepC.SetPosD.StepIt[答案]:D29.文档和视图的关系是().A.一对一B.一对多C.多对一D.多对多[答案]:B30.在视图类中获得文档类对象指针用函数().A.GetDocumentB.UpdateAllViewsC.OnUpdateD.SetModifiedFlag[答案]:A31.Win32应用程序入口函数是().A.MainB.EntranceC.WinMainD.Inlet[答案]:C32.创建窗口工作()不在WinMain中完成.A.设计窗口类B.注册窗口类C.创建窗口D.窗口过程[答案]:D33.项目文件的扩展名是().A.exeB.dspC.dswD.cpp[答案]:B34.利用ClassWizard不能().A.建立新类B.进行消息映射C.增加类的成员变量D.插入资源[答案]:D35.下列()不是MFC消息映射机制有关的宏.A.DECLARE_MESSAGE_MAPB.BEGIN_MESSAGE_MAPC.DECLARE_SERIALD.END_MESSAGE_MAP[答案]:C36.要使鼠标箭头在按钮上暂停时能显示工具栏按钮提示,必须设置工具栏的风格为().A.CBRS_TOOLTIPSB.CBRS_FL YBYC.CBRS_NOALIGND.WS_VISIBLE[答案]:B37.当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,水平滑动条发送()消息.A.WM_CHARB.WM_HSCROLLC.WM_VSCROLLD.WM_CHANGE[答案]:B38.要将模式对话框在屏幕上显示需要用到().A.CreateB.DoModalC.OnOKD.构造函数[答案]:B39.当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送()消息.A.WM_CHARB.WM_HSCROLLC.WM_VSCROLLD.WM_CHANGE[答案]:C40.以下控件中,()没有Caption属性.A.按钮B.组框C.编辑框D.静态文本框[答案]:C41.关于工具栏,菜单和加速键的关系,正确的说法是().A.工具按钮与菜单必须一一对应B.工具栏与加速键一一对应C.工具按钮不必与菜单一一对应D.菜单与加速键一一对应[答案]:C42.使用GetDC()获取的设备上下文在退出时,必须调用()释放设备上下文.A.ReleaseDC()B.deleteC.DeleteDC()D.Detach()[答案]:A43.列表框CListBox类的成员函数()用来向列表框增加列表项.A.AddString()B.DeleteString()C.ResetContent()D.FindString()E.GetCount()[答案]:A44.列表框CListBox类的成员函数()用来清除列表项所有项目.A.AddString()B.DeleteString()C.ResetContent()D.FindString()E.GetCount()[答案]:C45.下面()不是MFC设备环境类CDC类的派生类.A.GDIB.CPaintDClientDCD.CWindowDC[答案]:A46.()是非模态对话框.A.查找对话框B.字体对话框C.段落对话框D.颜色对话框[答案]:A47.使用()通用对话框类可用打开文件.A.CFileDialogolorDialogC.CPrintDialogD.CFontDialog[答案]:A48.常见的菜单类型不包括().A.自动菜单B.主菜单C.弹出菜单D.快捷菜单[答案]:A49.下列()不是MFCCDC类中常用的函数.A.TextOutB.EllipseC.RectangleD.CreateRedText[答案]:D50.对话框的功能被封装在()类中.A.CWndB.CDialogC.CObjectmdTarget[答案]:B51.Windows标准控件的属性设置通常由三个选项卡构成,不包括()A.ColorB.GeneralC.StyleD.ExtendStyles[答案]:A52.菜单项助记符前用()引导.A.%B.&C.#D.$[答案]:B53.更新菜单状态的消息是().MANDB.UPDATEC.UPDATE_COMMAND_UID.INV ALIDATE[答案]:C54.能间接调用视图类的OnDraw函数的是()A.OnTimerB.LButtonDownC.SerializeD.Invalidate[答案]:D55.下列()不是MFC消息映射机制有关的宏.A.DECLARE_MESSAGE_MAPB.BEGIN_MESSAGE_MAPC.DECLARE_SERIALD.END_MESSAGE_MAP[答案]:C56.下面()不是GDI对象.A.CFontB.CPalettelientDCD.CBitmap[答案]:C57.列表框的类型不包括()A.SimpleB.DropdownC.DropListD.Scroll[答案]:D58.设置编辑框控件的文本内容,可使用函数()A.SetWindowTextB.SetSelC.ReplaceSelD.GetWindowText[答案]:A59.使用()函数获取的设备上下文在退出时必须调用ReleaseDC释放.A.GetWindowsDCB.GetDCC.GetDesktopDCD.GetClientDC[答案]:B60.类CButton不是下列()控件对应的类.A.命令按钮B.单选按钮C.复选框D.静态文本框[答案]:D61.列表框CListBox类的成员函数()用来返回列表框的列表项总数.A.AddString()B.DeleteString()C.ResetContent()D.FindString()E.GetCount()[答案]:F62.滑动条是由滑动块和刻度线构成,按指定增量移动,CSliderCtrl类的成员函数()代表设置滑动块位置.A.SetRange()B.SetPos()C.SetTic()D.SetPoint()E.SetTicFreq()[答案]:B63.滑动条是由滑动块和刻度线构成,按指定增量移动,CSliderCtrl类的成员函数()代表设置刻度线位置,一次只能设置一个刻度线,用于手动设置刻度线.A.SetRange()B.SetPos()C.SetTic()D.SetPoint()E.SetTicFreq()[答案]:C64.滑动条是由滑动块和刻度线构成,按指定增量移动,CSliderCtrl类的成员函数()代表设置刻度线的疏密程度,配合Autoticks属性使用,每隔一定单位自动显示一条刻度线.A.SetRange()B.SetPos()C.SetTic()D.SetPoint()E.SetTicFreq()[答案]:F二,判断题1.UpdateData(true)函数完成成员变量的值传递给控件的操作.[答案]:F2.基于对话框的应用程序,也有文档类和视图类.[答案]:F3.调用DestroyWindow函数完成非模态对话框的销毁工作.[答案]:T4.每个对话框资源都会关联一个对话框类,常派生于CDialog,通过该类对象间接操纵对话框. [答案]:T5.基于对话框的应用程序在运行时也有菜单栏.[答案]:F6.对话框的功能被封装在CDialog类中.[答案]:T7.使用CColorDialog通过对话框类可以显示颜色对话框.[答案]:T8.DDX为对话框数据交换用.[答案]:T9.DDV完成成员变量和控件之间的交换.[答案]:F10.OnOK函数中进行对话框的初始化工作.[答案]:F11.对话框只由对话框类组成.[答案]:F12.从对话框的工作方式看,对话框可分为模式对话框和非模式对话框.[答案]:T13.查找对话框是模式对话框.[答案]:F14.颜色对话框是非模式对话框.[答案]:F15.每一个单选按钮在对话框类中都可以映射一个int类型值变量.[答案]:F16.当编辑框中的文本已被改变,在新的文本显示之后发送EN_CHANGE通知消息.[答案]:T17.CButton类控件只有按键按钮一种类型.[答案]:F18.一组单选按钮在组中的序号从1开始.[答案]:F19.向列表框增加列表项只能使用CListBox类成员的AddString函数.[答案]:F20.一个旋转按钮控件与一个相伴的控件一起使用时,该控件的Tab键次序必须大于旋转按钮. [答案]:F21.进度条控件的操作封装在CProgressCtrl类.[答案]:T22.多个静态文本控件必须有不同的ID号.[答案]:F23.调用Create成员函数创建动态分割窗口.[答案]:T24.调用Create成员函数创建静态分割窗口.[答案]:F25.视图派生类的成员函数通过调用GetDocument函数得到当前文档对象的指针.[答案]:T26.用户可以通过项目工作区窗口的ResourceView视图来查看资源.[答案]:T27.利用MFC编程时,所有的消息与消息处理函数的添加都必须采用ClassWizard类向导来完成.[答案]:F28.窗口是Windows应用程序的基本操作单元,是应用程序与用户之间交互的接口环境,也是系统管理应用程序的基本单位.[答案]:T29.Windows应用程序的入口也是main函数.[答案]:F30.键盘鼠标消息都是命令消息.[答案]:F31.使用MFCAppWizard[exe]向导创建应用程序框架时,向导生成的文件名和类名是不可以更改的.[答案]:F32.消息映射是将消息处理函数与要处理的特定消息连接起来的一种机制.[答案]:T33.命令消息是由菜单项,工具栏按钮和快捷键等用户界面对象发出的WM_COMMAND消息.[答案]:T34.用快捷键F9既可设置断点,又可取消断点.[答案]:T35.调试程序时,会同时出现Variable窗口和Watch窗口.[答案]:T36.Windows是一个基于事件的消息驱动系统.[答案]:T37.MFC采用消息映射来处理消息.[答案]:T38.WM_RBUTTONDOWN是鼠标右键按下时产生的消息.[答案]:T39.给菜单项定义快捷键,只需在菜单项属性设置对话框的Caption文本框中说明即可. [答案]:F40.快捷菜单一般出现在鼠标箭头的位置.[答案]:T41.UPDATE_COMMAND是更新命令用户接口消息.[答案]:F42.工具栏停靠特性只能设置一次.[答案]:T43.状态栏的功能由CToolBar类实现.[答案]:F44.CMenu类,CToolBar类和CStatusBar类的根基类是相同的.[答案]:T45.菜单选择只可以通过鼠标操作来完成.[答案]:F46.状态栏可以通过资源编辑器来编辑.[答案]:F47.MFC应用程序框架为状态栏定义的静态数组indicators放在MainFrm.h文件中. [答案]:F48.在菜单设计时,&字符的作用是使其后的字符加下划线.[答案]:TlientDC代表整个窗口的设备环境.[答案]:F50.删除CPen对象可调用CPen对象的DeleteObject函数.[答案]:F51.DDB又称GDI位图,它依赖于具体设备,只能存在于内存中.[答案]:T52.创建阴影画刷函数是CreateHatchBrush.[答案]:T53.深绿色RGB值为(0,128,0).[答案]:T54.Windows引入GDI的主要目的是为了实现设备相关性.[答案]:F55.Windows用COLORREF类型的数据存放颜色.[答案]:T56.Windows是按图形方式输出字符的.[答案]:T57.TextOut是CDC类中常用的文本输出函数.[答案]:T58.创建画笔后必须调用CDC类的成员函数SelectObject将画笔选人当前设备环境. [答案]:T59.对话框创建后,发送WM_CREATE消息,在该消息处理代码中创建各控件.[答案]:T60.通过AppWizard建立的程序不能被立即执行.[答案]:F61.打开一个项目,只需打开对应的项目工作区文件.[答案]:T62.在同一项目中,VisualC++在内部用来标识资源的资源符号不能重复.[答案]:T63.在Windows环境下,资源与程序源代码紧密相关.[答案]:F64.用户可以通过选择Tools|Customize菜单命令设置集成开发环境的工具栏.[答案]:T65.项目工作区文件的扩展名为dwp.[答案]:F66.Ctrl+F5是编辑程序的快捷键.[答案]:F67.F7是运行程序的快捷键.[答案]:F三,填空题1.项目工作区文件的扩展名是###.[答案]:dsw2.修改公司,描述等信息需用###编辑器.[答案]:Version3.利用###可以快速创建各种风格的应用程序框架,并可自动生成程序通用的源代码.[答案]:应用程序向导4.启动VisualC++,进入VisualC++IDE,从###菜单上选择New菜单项,此时将弹出New对话框[答案]:应用程序向导5.利用###可以快速创建各种风格的应用程序框架,并可自动生成程序通用的源代码[答案]:File6.句柄是Windows使用的一种无重复整数,主要用来###.[答案]:标识应用程序中的一个对象7.一个单文档的MFC应用程序框架一般包括5个类:应用程序类,框架窗口类,###,文档类和文档模板类.[答案]:视图类8.用户点击菜单项后,会产生###消息.[答案]:WM_COMMAND9.改变菜单项文本是使用CCmdUI类的###成员函数.[答案]:SetText10.处理菜单命令消息首先会在###类中.[答案]:视图11.弹出快捷菜单使用的是CMenu类的###函数.[答案]:TrackPopupMenu12.在状态栏中添加文本使用的是CStatusBar类的###函数.[答案]:SetPaneText13.与DOS字符方式下的输出不同,Windows是按###方式输出的.[答案]:图形14.为了体系Windows的设备无关性,应用程序的输出面向一个称为###的虚拟逻辑设备. [答案]:设备环境15.可以利用CGdiObject类的成员函数###将GDI对象设置成指定的库存对象.[答案]:CreateStockObject16.对话框的主要功能是###和输出信息.[答案]:接收用户输入17.使用###函数可用创建非模式对话框.[答案]:Create18.每个控件最多只能关联Control和Value类型成员变量各###个.[答案]:119.一组单选按钮在对话框类中只能映射一个###类型值变量,对应单选按钮在组中的序号,序号从0开始.[答案]:int。

软件工具与应用实验指导书

软件工具与应用实验指导书

软件工具与应用实验指导书一、实验平台VisualC++是Microsoft公司为开发Windows应用程序而创建的一种新的编程工具,它是生产效率最高的C++工具,用于创建性能最高的Windows应用程序和Web程序。

儿乎所有的世界级软件,从领先的Web浏览器到以任务为主的应用程序,都是用MiCrOSOflViSUaIC++开发系统创建的。

ViSUalC++6.0给C++带来了高水准的生产效率,并具有使用灵活、性能强大和控制简单等优点。

它的高性能及高度集成的开发环境,可使用户比从前更方便、快捷地创建、修改和调试WindOWS应用程序,而无需手工编制程序语句。

VisualC++6.0与以前的版本相比有了多方面的改进。

它的编译器、调试器、连接器、编辑器、资源编辑器都有所加强,在编辑器中还提供了自动语句生成功能,编辑器会像VisualBasic一样自动提示函数的参数、对象的成员。

另夕卜,VisualC++6.0还提供了很多向导。

MFC提供了一些新的类,提供了更强大的数据访问功能。

用户可利用ViSUalC++6.0以两种方式编写Win32应用程序,一种方式是基于WindowsAPI的编程方式,另一种是基于MFC的编程方式。

二、实习目的和要求软件工具与应用是一门实际技术课程,有很强的实践性。

通过实验教学环节,对学生进行实践技能和科学研究方法的训练,巩固其在课堂上所学书本知识,加深印象、熟练掌握。

实验中,一是理解使用ViSUalC++进行面向对象与可视化程序设计的基本原理和方法;二是掌握使用API函数进行可视化编程、使用MFC进行可视化编程和VisualC++高级编程的技能;三是锻炼对前后章节知识的综合运用的能力,逐步全面掌握面向对象与可视化编程技术,为实际的软件开发打下基础。

三、实验实验一:ViSlIaIC++基础及开发环境实验目的:让学生熟悉VisualC++开发环境。

实验内容和要求:通过上机实习熟悉ViSUalC++开发环境及其各个成分的使用方法:菜单、工具栏、项目工作区窗口、文档窗口、输出窗口。

windows程序设计实验报告

windows程序设计实验报告

windows程序设计实验报告《Windows程序设计》实验报告实验室: S306(308)学院:计算机科学与技术专业:计算机科学与技术⽬录实验⼀、熟悉visual c++的编程环境 (3)⼀、实验⽬的和要求: (3)⼆、实验内容、程序清单及运⾏结果: (3)1.编辑第⼀个C++程序 (3)2. ⽤AppWizard建⽴⼀个MFC Windows应⽤ (3)3. 编写简单的计算程序 (4)运⾏结果: (4)三、⼼得体会: (4)实验⼆、对话框的使⽤ (5)⼀、实验⽬的和要求: (5)⼆、实验内容、程序清单及运⾏结果 (5)实验步骤: (5)实验结果: (7)三、⼼得体会: (7)实验三、创建⼀个进程来运⾏⼀个应⽤程序 (8)⼀、实验要求和⽬的 (8)⼆、实验内容、程序清单及运⾏结果 (8)实验步骤: (8)实验结果: (9)三、实验⼼得 (9)实验四、调整线程优先级 (10)⼀、实验要求和⽬的 (10)⼆、实验内容、程序清单及运⾏结果 (10)实验步骤: (10)实验结果: (11)三、实验⼼得 (11)实验⼀、熟悉visual c++的编程环境⼀、实验⽬的和要求:1.了解和使⽤VC集成开发环境2.熟悉VC环境的基本命令和功能键,3.熟悉常⽤的功能菜单命令4.学习使⽤VC++环境的帮助5.学习完整的C++程序开发过程6.理解简单的C++程序结构7.了解⽤Visual C++开发Windows MFC应⽤程序的过程⼆、实验内容、程序清单及运⾏结果:1.编辑第⼀个C++程序源程序代码://hello world example#includeint main() {cout << "hello!"<< endl ;return 0; //正常返回}运⾏结果:2. ⽤AppWizard建⽴⼀个MFC Windows应⽤在窗⼝中输出"Hello,World!",修改OnDraw函数的定义,在最后⼀⾏加⼀句:pDC->TextOut(50,50,"Hello, World");运⾏结果:3. 编写简单的计算程序输⼊圆的半径,计算圆的周长和⾯积并输出。

设计一个多功能计算器

设计一个多功能计算器
MFC 是 Win API 与 C++的结合。API 即微软提供的 WinDOS 下应用程序的编程语言接口, 是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第 三方的编程语言来进行对 WinDOS 下应用程序的开发,使这些被开发出来的应用程序能在 WinDOS 下运行,比如 VB,VC++,Java 编程语言函数本质上全部源于 API,因此用它们开发出 来的应用程序都能工作在 WinOS 的消息机制和绘图里,遵守 WinDOS 作为一个操作系统的内 部实现。MFC 是微软对 API 函数的专用 C++封装,这种结合一方面让用户使用微软的专业 C++ SDK 来进行 Win 下应用程序的开发变得容易,因为 MFC 是对 API 的封装,微软做了大量的工 作,隐藏了好多程序开发人员在 Win 下用 C++ & MFC 编制软件时的大量内节,如应用程序实 现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价,因此就 造成了 MFC 对类封装中的一定程度的的冗余和迂回,但这是可以接受的。
运算流程图如图 1 所示:从图中可以看到,界面完成初始化后,其操作是循环操作, 这样就能实现连续运算。
图 1:运算流程图 第4页
计算器的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约 美观的效果。使用人员单机按钮进行操作,但是不能通过键盘直接输入。
能实现的功能有:实数的加、减、乘、除四则运算(能实现连续运算),清零、退格、 退出程序等功能。
MFC 不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关 联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界 面类,不实现对一个窗口对象的控制,而是一些在 WinDOS(用 MFC 编写的程序绝大部分都在 WinDOS 中运行)中实现内部处理的类。 3.可行性分析

Microsoft_Visual_C6.0使用方法绝对实用

Microsoft_Visual_C6.0使用方法绝对实用
1.打开VC++窗口,单击菜单[File]->[New] 2.在弹出窗口上选择标签Project,选中Win32 Console Application项,并在Project name框输 入工程名;在Location框输入保存源程序的路径名; 单击OK。 3.在弹出窗口选择An Empty Project,单击[Finish] 按钮;在下一窗口单击OK。 4.再在VC++菜单条中单击[File]->[New]。
6
[Project]工程菜单
[Project]菜单共有6个选项:
1、Set Active Project 在多个工程中选定当前活动工程。 2、Add to Project 向当前工程添加文件、文件夹、数据连接 、Visual C组件,以及ActiveX控件。 3、source Control源代码控制具。 4、 Dependencies设置工程间的依赖关系。 5、 Settings 设置工程属性(调试版本、发布版本和共同部分)。 6、Export Makefile 导出应用程序的Make(*.mak)文件。
10
[Help]窗口菜单
[Help]菜单中的4个选项Contents、Search、Index 和Technical Support 都会弹出帮助窗口,叫做 MSDN Library Visual Studio6.0。 MSDN库提供的帮助工能很丰富,可以以目录、索引 和搜索三种方式提供帮助。浏览方式多样,甚至可以 连接到Web网站查找信息。 另有两个选项: Keyboard Map选项打开快捷键列表; Tip of the Day选项打开Tip of the Day对话框,介 绍Visual C++6.0的使用知识和技巧。

Windows程序设计题(含简答题答案)

Windows程序设计题(含简答题答案)

《Windows程序设计》模拟题一.单项选择题1. 在VC++中,项目文件的扩展名是(B)。

A)exe B)dspC)d sw D)cpp2. 在MFC中,利用ClassWizard不能(D)。

A)建立新类B)进行消息映射C)增加类的成员变量D)插入资源3. 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。

A)WM_CHAR B)WM_HSCROLLC)W M_VSCROLL D)WM_CHANGE4. 更新菜单状态的消息是(C )。

A)WM_COMMAND B)UPDATEC)UPDATE_COMMAND_UI D)INVALIDATE5. 对于消息队列描述正确的是( D )A)在Windows中只有一个消息系统,即系统消息队列。

消息队列是一个系统定义的数据结构,用于临时存储消息。

B)系统可从消息队列将信息直接发给窗口。

另外,每个正在Windows下运行的应用程序都有自己的消息队列。

C)系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。

应用程序的消息对列中存储了程序的所有窗口的全部消息。

D)以上都正确6. 在MFC中,所有的控件都是(B)类的派生类,都可以作为一个特殊的窗口来处理。

A)CView B)CWndC)C Window D)CDialog7. 使用GetDC()获取的设备上下文在退出时,必须调用(A)释放设备上下文。

A)ReleaseDC() B)delete()C)D eleteDC() D)Detach()8. 希望菜单无效,应该用CCmdUI类的(A)成员函数。

A)Enable B)SetRadioC)S etCheck D)SetText9. 希望菜单前出现一个“√”,应该用CCmdUI类的(C)成员函数。

A)Enable B)SetRadioC)SetCheck D)SetText10. 下面(A)不是MFC设备环境类CDC类的派生类。

计算机图形学教程电子版

计算机图形学教程电子版

计算机图形学已成为计算机技术中发展最快的领域,计算机图形软件也相应得到快速发展。

计算机绘图显示有屏幕显示、打印机打印图样和绘图机输出图样等方式,其中用屏幕显示图样是计算机绘图的重要内容。

计算机上常见的显示器为光栅图形显示器,光栅图形显示器可以看作像素的矩阵。

像素是组成图形的基本元素,一般称为“点”。

通过点亮一些像素,灭掉另一些像素,即在屏幕上产生图形。

在光栅显示器上显示任何一种图形必须在显示器的相应像素点上画上所需颜色,即具有一种或多种颜色的像素集合构成图形。

确定最佳接近图形的像素集合,并用指定属性写像素的过程称为图形的扫描转换或光栅化。

对于一维图形,在不考虑线宽时,用一个像素宽的直、曲线来显示图形。

二维图形的光栅化必须确定区域对应的像素集,并用指定的属性或图案进行显示,即区域填充。

复杂的图形系统,都是由一些最基本的图形元素组成的。

利用计算机编制图形软件时,编制基本图形元素是相当重要的,也是必需的。

点是基本图形,本章主要讲述如何在指定的输出设备(如光栅图形显示器)上利用点构造其他基本二维几何图形(如点、直线、圆、椭圆、多边形域及字符串等)的算法与原理,并利用Visual C++编程实现这些算法。

1.1 直线数学上,理想的直线是由无数个点构成的集合,没有宽度。

计算机绘制直线是在显示器所给定的有限个像素组成的矩阵中,确定最佳逼近该直线的一组像素,并且按扫描线顺序,对这些像素进行写操作,实现显示器绘制直线,即通常所说的直线的扫描转换,或称直线光栅化。

由于一图形中可能包含成千上万条直线,所以要求绘制直线的算法应尽可能地快。

本节介绍一个像素宽直线的常用算法:数值微分法(DDA)、中点画线法、Bresenham 算法。

计算机图形学原理及算法教程 (Visual C++版) 21.1.1 DDA (数值微分)算法DDA 算法原理:如图1-1所示,已知过端点000111(, ), (, )p x y p x y 的直线段01p p ;直线斜率为1010y y k x x -=-,从x 的左端点0x 开始,向x 右端点步进画线,步长=1(个像素),计算相应的y 坐标y kx B =+;取像素点 [x , round (y )] 作为当前点的坐标。

C++ClassWizard类向导的使用

C++ClassWizard类向导的使用

//添加代码 添加代码 } point.h point.cpp
二、ClassWizard的启动 的启动 只有在打开或创建了一个项目后, 只有在打开或创建了一个项目后,在View主菜单中才会出 主菜单中才会出 类向导菜单项。 现ClassWizard类向导菜单项。 类向导菜单项
启动ClassWizard有两种方式: 有两种方式: 启动 有两种方式 1、通过菜单命令,如上图; 、通过菜单命令,如上图; 2、通过快捷键 ቤተ መጻሕፍቲ ባይዱ通过快捷键Ctrl + W。 。
5、通过ClassWizard类向导进行消息映射,主要包括:在视图 、通过 类向导进行消息映射 类向导进行消息映射,主要包括: 窗口左键单击(WM_LBUTTONDOWN)、在对话框上单击四个 窗口左键单击 、 按钮(BN_CLICKED)。 按钮 。
6、编写具体的函数代码。 、编写具体的函数代码。
MFC管理类的方式 管理类的方式
class CPoint{ private: int X; int Y; public: CPoint(int x=0,int y=0); void Show( ); void f( ); }; #include “point.h” CPoint::CPoint(int x=0,int y=0){ X=x; Y=y; } void CPoint::Show( ){ cout<<“(”<<X<<“,”<<Y<<“)”; } void CPoint::f( ){
void CTestView::OnLButtonDown(UINT nFlags, CPoint point) //鼠标左键的函数 鼠标左键的函数 { // TODO: Add your message handler code here and/or call default CShowDlg showdlg; showdlg. DoModal( ); CView::OnLButtonDown(nFlags, point); }

C++简单画图程序课设

C++简单画图程序课设

目录1.基本功能描述 ....................................................................................................... - 1 -2.设计思路 ............................................................................................................... - 1 -3.软件设计 ............................................................................................................... - 4 -3.1 设计步骤 .................................................................................................... - 4 -3.2 界面设计 .................................................................................................... - 9 -3.3 关键功能的实现 ........................................................................................ - 9 -4.结论与心得体会 ................................................................................................. - 10 -5.参考文献 ............................................................................................................. - 11 -6.思考题 ................................................................................................................. - 11 -7.附录 ..................................................................................................................... - 12 -7.1 调试报告 .................................................................................................. - 12 -7.2 测试结果 .................................................................................................. - 13 -7.3 关键源代码 .............................................................................................. - 15 -简单画图程序1.基本功能描述1)设计一个程序可完成绘制直线,矩形和椭圆的功能。

控件上机指导书

控件上机指导书

控件示例1■第一步用AppWizard建立一个基于对话框的MFC应用程序。

将新建工程命名为TestCtrl1,在AppWizard的Step 1对话框中选择Dialog based选项,其它按照默认设置。

AppWizard自动建立一个作为应用程序主窗口的对话框模板IDD_TESTCTRL1_DIALOG及其对应的对话框类CTestCtrl1Dlg。

提示:对该对话框的使用与普通对话框并没有什么不同,只不过在程序启动后对话框会自动显示出来,而当用户关闭对话框后,应用程序也就终止了。

如果读者观察CTestCtrl1App::InitInstance函数就会发现,该函数调用DoModal来显示一个CTestCtrl1Dlg对话框,并使m_pMainWnd指针指向CTestCtrl1Dlg对象,从而使该对话框成为程序的主窗口。

■第二步设计IDD_TESTCTRL1_DIALOG对话框模板。

删除该模板上除Cancel按钮以外的控件。

并根据图6.2和表6.5,向IDD_TESTCTRL1_DIALOG对话框模板中加入控件。

表6.5 控件属性控件类型ID 标题其他属性静态图片IDC_STATIC_BITMAP Type列表框选择Bitmap 选中Center image属性静态文本IDC_STATIC_TITLE 标题缺省组框缺省选择图片缺省单选按钮IDC_RADIO1 女士选中Group属性单选按钮IDC_RADIO2 夫妇缺省组框缺省选择标题缺省单选按钮IDC_RADIO3 女士选中Group属性单选按钮IDC_RADIO4 夫妇缺省组框缺省改变缺省复选框IDC_CHECK1 同时改变缺省命令按钮IDC_BUTTON_ALTER 修改选中Default button属性命令按钮IDCANCEL 关闭缺省提示:因为顺序添加的单选按钮被看成是一组,该组中只有一个单选按钮能被选中;而本例中IDC_RADIO1和IDC_RADIO2为一组,IDC_RADIO3和IDC_RADIO4为一组,因此一定要选中IDC_RADIO3的Group属性。

计算机图形学实验一

计算机图形学实验一

计算机图形学实验一文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]实验一二维基本图元的生成与填充实验目的1.了解并掌握二维基本图元的生成算法与填充算法。

2.实现直线生成的DDA算法、中点算法和Bresenham算法。

3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。

二.实验内容和要求1.选择自己熟悉的任何编程语言, 建议使用VC++。

2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。

3.实现生成直线的DDA算法、中点算法和Bresenham算法。

4.实现圆弧生成的中点算法。

5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。

6.实现一般连通区域的基于扫描线的种子填充算法。

7.将生成算法以菜单或按钮形式集成到用户界面上。

8.直线与圆的坐标参数可以用鼠标或键盘输入。

6. 可以实现任何情形的直线和圆的生成。

实验报告1.用户界面的设计思想和框图。

2.各种实现算法的算法思想。

3.算法验证例子。

4.上交源程序。

直线生成程序设计的步骤如下:为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。

如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。

图1-1 基本图形生成的程序运行界面2.创建工程名称为“基本图形的生成”单文档应用程序框架(1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。

(2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入 “基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。

(3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。

(4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。

(5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。

网络编程实用教程课后习题

网络编程实用教程课后习题

第一章网络编程基础1.什么是线程,什么是进程?答:进程是处于运行过程中的程序实例,是操作系统调度和分配资源的基本单位。

一个进程实体由程序代码、数据和进程控制块三部分构成。

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。

2.描述网络应用程序的一般组成。

为什么说应用层协议是在应用程序中实现的?答:从功能上,可以将网络应用程序分为两部分,一部分是专门负责网络通信的模块,它们与网络协议栈相连接,借助网络协议栈提供的服务完成网络上数据信息的交换。

另一部分是面向用户或者作其他处理的模块,它们接收用户的命令,或者对借助网络传输过来的数据进行加工,这两部分模块相互配合,来实现网络应用程序的功能。

2.实现网间进程通信必须解决哪些问题?答:(1)网间进程的标识问题;(2)如何与网络协议栈连接的问题;(3)协议的识别问题;(4)不同的通信服务的问题4.说明TCP/IP中,端口的概念和端口的分配机制。

答:端口是TCP/IP协议族中,应用层进程与传输层协议实体间的通信接口。

TCP/IP协议采用了全局分配(静态分配)和本地分配(动态分配)相结合的分配方法。

对于TCP,或者UDP,将它们的全部65535个端口号分为保留端口号和自由端口号两部分。

保留端口的范围是0—1023,又称为众所周知的端口或熟知端口(well-known port),其余的端口号,1024-65535,称为自由端口号,采用本地分配,又称为动态分配的方法。

总之,TCP或UDP端口的分配规则是:端口0:不使用,或者作为特殊的使用;端口1-255:保留给特定的服务,TCP和UDP均规定,小于256的端口号才能分配给网上著名的服务;端口256-1023:保留给其他的服务,如路由;端口1024-4999:可以用作任意客户的端口;端口5000-65535:可以用作用户的服务器端口。

VC++6.0入门【第六章 创建和使用对话框】

VC++6.0入门【第六章 创建和使用对话框】

第6章创建和使用对话框对话框是一种用户界面,几乎每一个Windows程序都使用对话框与用户进行交互。

对话框可能是一个简单的只含有OK按钮的消息框,也可以是一个复杂的数据输入表单。

对话框上有一些方便用户输入的控件,对话框依靠这些控件与用户进行交互,其实质是一个接收消息的窗口。

在本章节我们主要讲述模式对话框和无模式对话框的原理和使用方法,下一章将详细介绍各种控件的使用。

你将学习创建一个对话框,使用对话框模板编辑一个对话框资源,并在程序中调用对话框的方法。

6.1 对话框的基本原理6.1.1 对话框的工作原理在创建一个对话框之前,我们先来了解一下对话框是如何工作的,对话框的数据来自三方面:对话框资源、对话框对象、和一个文档对象:1.对话框资源对话框资源是一个用户输入或取得数据的图形界面。

这个图形界面是使用Develop Studio的对话框编辑器在对话框模板上创建的,程序员可以在对话框模板上增加并编辑控件,生成对话框资源。

当应用程序运行时,就可以得到一个对话框。

2.对话框对象MFC使用CDialog类来描述对话框,它是CWnd类的派生类。

在CWnd类的基础上增加了数据交换的功能。

当创建一个新的对话框资源后,使用ClassWizard可以创建一个对话框类的派生类。

对话框对象实现了对话框和应用程序之间的通信。

在应用程序中定义一个对话框对象后,在对话框显示前,可以通过访问对话框对象的成员变量为一个对话框的控件初始化,在对话框关闭后,可以通过访问对话框对象的成员变量获得用户的输入数据。

3.文档对象MFC使用文档对象描述应用程序处理的数据,用户输入的数据要进一步的处理,通常要先存贮到文档对象中。

例如:一个学生记录处理的应用程序,用户通过一个对话框输入学生记录并贮存到一个文件中。

应用程序的处理顺序是:用户在对话框中输入信息,通过对话框对象得到输入信息,将输入信息整理到文档对象中,使用序列化函数将文档对象存贮到一个文件中,所以文档对象扮演了一个很重要的数据交换的角色。

《Visual C++程序设计教程》第四章对话框设计和Windows常用控件

《Visual C++程序设计教程》第四章对话框设计和Windows常用控件
第4章 对话框设计和Windows常用控件
4.1 对话框应用程序介绍


1.对话框组成 对话框主要由以下两部分组成: (1) 对话框资源:定义了对话框的特性(如大小、位 置和风格等)以及对话框中每个控件的类型、位置等 属性。一般情况下,对话框资源在资源编辑器中静 态地定义,也可以用编程的方法在程序运行时动态 地创建。 (2) 对话框类:对话框类是与对话框资源相关联的, 基于CDialog类的派生类,它提供编程接口来管理对 话框。



1.通过资源编辑器添加控件 打开对话框资源编辑器弹出如图48所示的控 件工具栏之后,就可以方便地在对话框中添加 各种控件了。 (1)单击添加:在控件工具栏上单击要添加 的控件后,将鼠标移动到对话框模板上,此时 鼠标光标变成了“+”形状,在对话框上再次单 击鼠标,控件就添加到对话框模板上了。 (2)拖动添加:拖动要添加的控件到对话框 模板上,然后释放鼠标,也可以添加控件。
(2)单击“新建”按钮可以创建一个资源类型列表中指定类 型的新资源;单击“定制”按钮可以创建资源类型列表中 没有的新类型的资源;单击“导入”按钮可以将外部已有 的位图、图标等资源添加到当前应用程序中。 (3)修改对话框属性。在对话框模板的空白处右击,从弹出 的快捷菜单中选择“属性”命令,弹出如图4-3的“对话属 性”对话框。

4.列表框控件(CListBox) 列表框是一种输入控制,它可以使用户从所列的表 项中进行选择。用户可以在其中选择一个或多个项, 这与单选按钮和复选框的功能有些相近,但不同的 是,列表框中项的数目是灵活变化的,程序运行时 可往列表框中添加或删除某些项。并且,当列表框 中项的数目较多不能一次全部显示时,还可以通过 滚动条来拓展显示范围。

MFC期末复习简答题及答案

MFC期末复习简答题及答案

MFC 期末复习及答案1 简述MFC 应用程序的执行过程。

2 简述文档/视图与其他类对象的关系。

3 简述MFC 消息映射机制。

4 消息WM_LBUTTONDOWN 的消息映射宏和消息处理函数是什么?5 如何自定义消息?如何发送自定义消息?6 GDI 创建哪几种类型的图形输出?7 什么是设备环境?它的主要功能有哪些?8 什么是GDI,它有什么功能?MFC 将GDI 函数封装在哪个类中?9 请叙述设备无关性的含义,实现设备无关性需要哪几个环节?10 MFC 提供了哪几种设备环境类?它们各自有什么用途?11 简述传统的SDK 获取设备环境的方法。

12 简述创建和使用自定义画笔的步骤。

13 简述采用MFC 方法编程时,显示一个DDB 位图的步骤。

14 简述菜单设计的主要步骤。

15 为应用程序创建快捷菜单主要有哪些方法?16 如何动态创建菜单?17 创建工具栏的基本步骤有哪些?18 简述MFC 创建状态栏所做的工作。

19 简述创建和使用模态对话框的主要步骤。

20 如何向对话框模板资源添加控件?如何添加与控件关联的成员变量?21 什么是DDX 和DDV?编程时如何使用MFC 提供的DDX 功能?22 简述创建属性页对话框的主要步骤。

23 在应用程序中访问控件的方法有哪些?24 单选按钮控件如何成组?25 组合框与列表框相比有什么不同?如何给组合框添加初始的列表项?26 通过哪几个主要成员函数完成文档与视图之间的相互作用?并简述这些成员函数的功能。

27 简述文档序列化与一般文件处理的区别。

28.如何让用户定义的类支持序列化?1 简述MFC 应用程序的执行过程。

MFC 应用程序启动时,首先创建应用程序对象theApp。

这时将自动调用应用程序类的构造函数初始化对象theApp,然后由应用程序框架调用MFC 提供的WinMain( )主函数。

在WinMain( )主函数中,首先通过调用全局函数GetApp( )来获取theApp 的指针pApp,然后通过该指针调用theApp 的成员函数InitInstance( )来初始化应用程序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第七章使用ClassWizard设计类前面我们利用AppWizard创建了一个应用程序框架,它除了显示一个Windows的多文档界面以外,目前还没有任何实际的用处,我们必须为它添加实际的功能。

事实上,大多数Visual C++程序员都是在这个应用程序框架的基础上从事添加各种功能模块的工作,包括设计自己的类,编写具有一定功能的成员函数。

Visual C++的集成开发环境向用户提供了一个功能很强的操作类的工具—ClassWizard,我们可以利用该工具非常方便地向应用程序中添加类、向类中添加消息处理函数、成员函数、以及添加成员变量等。

利用ClassWizard,我们再也不用手工编写那些繁琐的代码,只需使用简单的鼠标和键盘操作就能够完成大量的工作,相当于用机器制造机器。

一ClassWizard简介从字面上看,Class是类的意思,而Wizard则是“智者”的意思,两者合起来,ClassWizard的意思就是智能地操作类的工具。

在Visual C++ 6.0的集成开发环境中,ClassWizard最能体现它的特征。

与AppWizard类似,ClassWizard也能自动生成程序代码,只是两者生成的对象不同,AppWizard主要用来创建应用程序的框架,而ClassWizard则主要是在应用程序框架的基础上创建和编辑各种类。

ClassWizard既可以操作由AppWizard在应用程序框家中创建的类,又可以操作后来由ClassWizard自己添加的类。

利用ClassWizard可以很轻松地完成一些最基本、最普通的工作,如在自己的应用程序中创建新类、映射消息为其添加消息处理函数、覆盖虚拟函数、将对话框中的控件与某个变量相关联等。

ClassWizard只能用于使用MFC类库的应用程序中。

ClassWizard可以完成的主要功能如下:◆创建新类。

这是ClassWizard最基本的用途之一。

创建的新类由一些主要的基类派生而来,这些基类用于处理Windows的消息,对一般用户来说,这些基类已经足够了。

◆进行消息映射。

这些消息主要和窗口、菜单、工具栏、对话框、控件以及加速键相关联。

◆添加成员变量。

利用ClassWizard,可以很方便地向类中添加成员变量,并将这些成员变量与对话框或窗口中的控件关联起来,当控件的值改变时,所对应的成员变量的值也跟着发生变化。

◆覆盖虚拟函数。

使用ClassWizard可以方便地覆盖基类中定义的虚拟函数。

二ClassWizard操作说明在刚进入Visual C++ 集成开发环境时,菜单项View|ClassWizard是灰化禁止的,只有在打开一个工作区文件后,该菜单项才能正常显示,表明该选项是可用的。

首先打开以前创建的多文档应用程序FirstApp,再选择菜单项View|ClassWizard,即可启动ClassWizard,进入ClassWizard环境,ClassWizard 是一个对话框,其中包含五个选项卡,分别为:Message Maps、Member V ariables、Automation、ActiveX Events、以及Class Info。

它们针对不同的对象完成不同的任务。

1. Message Maps选项卡它是ClassWizard对话框中最重要的选项卡,主要完成创建新类、添加、删除消息处理函数等任务。

该选项卡中包含了两个下拉列表框:Project下拉列表框和Class name下拉列表框;三个列表框:Object IDs列表框、Message列表框和Member functions 列表框;一个文本信息框;四个工具按钮。

★Project下拉列表框:该下拉列表框用于选择当前操作的项目。

当当前打开的工作区中包含多个项目文件时,用户可以从这个下拉列表框中选择将要操作的项目文件。

对于单项目工作区来说,其默认值就是项目文件。

★Class name下拉列表框:该下拉列表框用于选择当前要操作的类。

当用户在Class name下拉列表框中选中了某个类之后,Object IDs窗口中的内容将会发生相应的变化。

★Object IDs列表框:该列表框用于显示当前选定类中能够产生消息的对象的ID值。

这些对象包括菜单选项、工具栏按钮选项、对话框以及各种控件等。

通常Object IDs列表框中所包含的第一个对象就是当前类名。

★Message列表框:Message列表框中列出了对应于Object IDs列表框中所选中的当前项可以处理的消息以及可被重写的MFC虚函数。

当Object IDs列表框中选定当前类名时,Message列表框前部分显示的是当前类所能覆盖的虚拟函数,后部分显示的是能够处理的消息。

如Object IDs列表框中选定其它对象,则Message列表框显示的就是当前项可以处理的消息。

★Member functions列表框:Member functions列表框中列出了在Class name下拉列表框中所选中的当前类包含的所有成员函数。

其中用字母“V”标出的是MFC虚函数,用字母“W”标出的是Windows消息处理函数。

★文本信息框:在Project下拉列表框的下方有一个文本信息框,用于显示当前选中类的源文件,包括.h文件和.cpp文件。

该文本信息框中显示的内容会随着选定类的变化而变化。

★Add Class按钮:该按钮用于向当前的Project中添加一个新类,新类可以是自己创建,也可以是从已有的文件中选取。

★Add Function按钮:该按钮用于向当前选定类中为当前选定的消息添加一个消息处理函数。

其中类是在Class name下拉列表框中选定的类;而当前消息则是在Message列表框中选定的消息。

Add Function按钮平时是灰化禁止的,只有当用户在Message列表框中选中某个特定的消息之后,该按钮才能正常显示,即此时才能使用。

★Delete Function按钮:该按钮用于在当前选定的类中删除已有的成员函数。

Delete Function按钮平时是灰化禁止的,只有当用户在Member functions列表框中选中某个消息处理函数之后,才能选择该按钮。

★Edit Code按钮:单击该按钮将打开编辑窗口,并将光标位置自动跳到当前选定的成员函数的源代码处。

2. Member Variables选项卡该选项卡主要用于添加与对话框中的控件相关联的成员变量,以便程序能利用这些成员变量与对话框中的控件进行数据交换。

该选项卡与Message Maps选项卡一样,也包含Project下拉列表框和Class name下拉列表框,分别用于选定用户操作的当前项目和当前类;Add Class按钮用于向当前项目中添加一个新类;一个文本信息框,用于显示当前选中类的源文件。

此外,Member V ariables选项卡中还包含另一个列表框以及另外四个工具按钮。

列表框中共有3列数据,分别为:★Control IDs:该项显示了当前选定类中能够映射成员变量的控件的ID值。

所谓能映射成员变量的控件,就是可以使用类中的成员变量来代表某个控件,当控件发生改变时,该成员变量的值也发生相应变化。

★Type:该项表示成员变量的类型。

★Member:该项表示成员变量的名字。

注意:并不是所有的类都有这些信息,只有在选择了对话框类、有格式视图类或记录视图类时才能显示出这些信息。

★Add V ariable按钮:该按钮用于为当前选定的控件添加一个成员变量。

★Delete V ariable按钮:该按钮用于删除一个现有的成员变量。

该按钮平时是灰化禁止的,只有当用户在Control IDs列表框中选中某个成员变量以后,才能选择该按钮执行删除工作。

★Update Columns按钮:该按钮用于选定一个数据源,只在记录集合类中才可以使用。

★Bind All按钮:只适用于记录集合类,单击此按钮将把所有未绑定的记录集里的数据成员绑定到数据源的一个表中相应的列上。

在默认情况下,MFC AppWizard和ClassWizard将绑定所有的列,所以很少需要使用数据绑定。

如果通过删除相关的数据成员将一些或所有列取消绑定,那么在这之后还可以重新绑定它们。

3. Automation选项卡该选项卡允许用户加入方法或属性以增强Automation功能。

4. ActiveX Events选项卡该选项卡允许用户加入事件以支持ActiveX控件。

5. Class Info选项卡该选项卡用于显示和设置当前选定类中的一些重要信息。

三使用ClassWizard创建新类使用ClassWizard最重要的作用就是创建新类,用户将不必手工添加创建类所需的大量代码,只需指定一些关于新类的重要信息,ClassWizard将自动为你生成这些代码。

下面以应用程序FirstApp为例说明创建过程。

步骤如下:(1)首先打开FirstApp的项目工作区。

(2)点击菜单项View|ClassWizard,进入ClassWizard对话框。

(3)在Message Maps选项卡中选择功能按钮Add Class,并从其下拉选项栏中单击New选项,将会打开New Class对话框。

(4)首先在Name栏中键入新类的名称,如FirstButton。

此时我们将看到在下面的File name栏中显示出ClassWizard自动为新类定义的默认文件名:FirstButton.cpp。

如果你不想要这个名字,也可以单击Change按钮对文件名进行修改。

(5)接下来应当设定新类的基类,即该类是由什么类派生而来的。

在Baseclass下拉列表框中选中所需的基类名,如CButton。

(6)如果你创建的基类需要对话框或其它资源,则应当在Dialog ID框中选择一个资源ID值。

(7)Automation组框用于设置类的自动化信息,这只适用于能够自动化的类,即由CCmdTarget所派生的类,我们保持其默认选择None。

(8)最后单击OK按钮结束。

至此我们已经成功地向项目中添加了一个新类FirstButton。

回到Visual C++的主窗口中,我们将发现在FirstApp的项目工作区中发生了一些变化。

打开ClassView选项卡,将看到一个新类FirstButton已经被添加到该项目的类列表中了。

同时在FirstView选项卡中将发现FirstApp项目中新增加了两个文件:FirstButton.h,FirstButton.cpp。

四使用ClassWizard添加消息处理函数使用ClassWizard来为类添加消息处理函数,用户将不需要手工编写消息映射所需的各种消息宏,这样大大减轻了工作量。

本节将以FirstApp应用程序为例来添加消息处理函数,处理用户在视图中的单击鼠标操作。

相关文档
最新文档