实验一熟悉VC开发环境体验MFC编程方式.doc_第1页
实验一熟悉VC开发环境体验MFC编程方式.doc_第2页
实验一熟悉VC开发环境体验MFC编程方式.doc_第3页
实验一熟悉VC开发环境体验MFC编程方式.doc_第4页
实验一熟悉VC开发环境体验MFC编程方式.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一:熟悉VC开发环境,体验MFC(Microsoft Foundation Class)编程方式1 Visual C+集成开发环境下面是Visual Studio界面,可以进行c/c+程序的编辑、编译和运行。编译调试输出区Workspace工作区源代码区2 “不做任何事情”的应用程序1)运行AppWizard来产生SDI应用程序。VC提供了一个AppWizard向导来帮助用户创建不同类型的应用程序,这里我们创建较为简单的单文档程序。在File菜单项中选择New,然后在New对话框中单击Project标签,显示如下:确保选择MFC AppWizard(exe),并填好上面的项目名称(project name标签)和项目所在目录(location标签)。单击OK按钮,我们下面通过一系列AppWizard屏幕操作来建立项目,首先是下面的屏幕:这里选择Single Document选项。然后在接下去的四个屏幕节目上都接受默认参数。最后的屏幕提示如下图所示:注意,类名和源文件名已经根据项目名产生了,一般类名的默认取名规则是以C开头,接着是项目名,称最后接上功能名称。上图中的这几个类分别继承于MFC提供的类CView、CWinApp、CFrameWnd和CDocument。 CTest01App的对象代表了应用程序,CMainFrame类的对象代表着应用程序的主框架窗口。一般文件的命名比类的命名少开头的C字母。单击Finish按钮。在AppWizard产生源代码之前,他将显示New Project Information对话框,如下图所示。用鼠标单击OK按钮,AppWizard就会开始创建应用程序的子目录(比如此例,在F:myproject下的test01)和该子目录下的一些文件。2) 对所产生的代码进行编译和链接。可以通过选择Build菜单中的Build test01.exe菜单项来创建应用程序或者单击工具栏按钮。如果创建成功,在应用程序所在目录F:myprojecttest01下将建立一个新的Debug目录,在该目录下将生成一个可执行文件test01.exe。3) 测试最终应用程序选择Build菜单中的Execute test01.exe或者单击工具栏按钮。 运行结果如下所示:AppWizard已经为我们完成了一系列可视化的功能,包括标题栏,菜单栏,工具栏等等,因为这些界面元素属于一般的可视化程序都会拥有的,所以AppWizard为我们自动生成这些功能,以减少程序员的工作。在Test01目录下会生成很多文件,其中以.dsw为后缀的文件是工作区文件,可以通过双击该文件或者通过Visual studio集成开发环境中的 File菜单下的open workspace条目、在弹出的对话框中选中该文件来打开整个项目。3 往test01程序中加入绘制代码,实现文字的输出并画一个灰色的圆:如下图:1) 编辑test01View.cpp中的OnDraw函数。选择Workspace工作区中的FileView选项卡,双击test01View.cpp打开该文件的源码,如下图:在test01View.cpp中找到OnDraw函数:void CTest01View:OnDraw(CDC* pDC)CTest01Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here然后用下面带阴影的代码来替代原来的代码:void CTest01View:OnDraw(CDC* pDC)pDC-TextOut(0,0,Hello,world!);CPen pen(PS_SOLID, 1, RGB(255,0,0); /实心的宽度为1的红色的笔,用来显示线条CPen *oldPen=pDC-SelectObject(&pen); /将笔选进CDC设备上下文CBrush brush(RGB(0,0,0); /黑色的刷子,用来填充封闭区域CBrush *oldBrush=pDC-SelectObject(&brush); /选进刷子,并返回CDC中先前的刷子pDC-Ellipse(CRect(0,20,100,120); /画椭圆,以参数为外接矩形pDC-SelectObject(oldPen); /恢复先前的笔pDC-SelectObject(oldBrush); /恢复先前的刷子OnDraw函数是CView类的一个虚成员函数,CView类是MFC提供的一个基本类。而CTest01View类是CView的子类。每次窗口需要被重新绘制时,比如当用户改变了窗口尺寸时,应用程序框架都会调用OnDraw函数重新绘制窗口。OnDraw函数的参数是CDC类的指针,CDC类是设备上下文,用来控制设备驱动程序,比如在屏幕上输出文字或图形。这里的三条语句用到了CDC类的三个成员函数,TextOut函数用来在指定的坐标点输出一个字符串,其中的前两个参数是坐标点,第三个参数是字符串。 CDC类的SelectObject函数用来将笔、刷子等选进CDC对象中,以备后面的使用。CDC中本身有默认的黑色的笔,白色的刷子,SelectObject函数返回CDC中的这些先前的笔或刷子对象。在使用完新的笔或刷子之后,需要将原来的笔或刷子恢复。CDC类的Ellipse函数以外接矩形为范围画一个椭圆。CRect是一个代表矩形的类,由MFC提供,前两个参数表示左上角左边,后两个参数表示右下角坐标,该椭圆会用前面选中的画刷来填充。几个常用的MFC提供的类还有CPoint, CSize. 程序的运行结果如下:同学们可以用MSDN查看这些函数来进一步的了解这些函数的使用。也可以试着改变这些参数来查看程序运行结果的变化。测试题:1)在窗口其他区域用虚线蓝色笔和红色刷子再画一个矩形2)使用CDC类的MoveTo和LineTo函数在窗口中画绿色直线实验二 :基本的事件处理,实现当鼠标指针落在椭圆的外接矩形内时,每按一下鼠标左键,椭圆就会改变颜色。如下图:1 用AppWizard产生一个名为test02的SDI(选中single document)项目,并将他放在F:myproject下,创建时所采用的一些选项及默认类名如下所示(参照实验一的创建步骤):2 在类CTest02View中加入数据成员m_rectEllipse和m_nColor。private:CRect m_rectEllipse;int m_nColor;在CTest02View类中加入如上的两个成员变量,可以找到test02View.h文件直接编辑添加,也可以通过如下的方式来添加:在workspace工作区找到CTest02View类,鼠标右击该类,选择Add Member Variable. 在弹出的对话框中填入如下的成员变量以及即可。3用ClassWizard在CTest02View类中加入消息控制函数在Developer Studio的View菜单中选择ClassWizard, 在弹出的对话框中找到如下图所示的项目名、类名、对象,以及消息。双击Messages栏下的WM_LBUTTONDOWN消息,将在Member functions栏中出现一个OnLButtonDown的成员函数。再按下Edit Code按钮进入对该消息响应函数的编辑。4 编辑CTest02View.cpp中的OnLButtoDown代码。void CTest02View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCView:OnLButtonDown(nFlags, point);OnLButtoDow函数的第二个参数用传递放鼠标左键按下时的位置然后用下面带阴影的代码来替代原来的代码:void CTest02View:OnLButtonDown(UINT nFlags, CPoint point) if(m_rectEllipse.PtInRect(point)if(m_nColor=GRAY_BRUSH)m_nColor=WHITE_BRUSH;elsem_nColor=GRAY_BRUSH;InvalidateRect(m_rectEllipse); /使矩形区域无效,引发重绘操作,从而调用OnDraw函数PtInRect是Crect类的成员函数,用来测试一个点是否落在某个矩形内。5 编辑CTest02View.cpp中的构造函数和OnDraw函数用下面带阴影的代码来替代原来的代码:CTest02View:CTest02View():m_rectEllipse(0,0,200,200)m_nColor=GRAY_BRUSH;void CTest02View:OnDraw(CDC* pDC)pDC-SelectStockObject(m_nColor); /该函数能直接选进系统提供的几个刷子或笔pDC-Ellipse(m_rectEllipse);6编译并运行test02程序选择Build菜单中的Build选项,或者在工具栏上单击按钮,然后再选择Build菜单中的Execute test02.exe,或者在工具栏上单击按钮。运行结果如下所示:视窗中的圆会随着鼠标左键的按下不断地在灰色和白色中切换。同样的道理,可以实现对鼠标左键松开消息WM_LBUTTONUP和鼠标右键按下和松开消息WM_RBUTTONDOWN、WM_RBUTTONUP以及鼠标移动消息WM_MOUSEMOVE,还有键盘按下字符的消息WM_CHAR等等。测试题:利用已学的鼠标响应和用CDC类的知识,增加下面的功能1)利用对WM_CHAR消息的响应,来实现从键盘获得字符并将其显示到视窗上2)在视窗内的椭圆所属的外界矩形之外,在鼠标左键按下的点和左键松开的点之间画线条。效果如下图:要用到的新函数如下:GetDC, ReleaseDC,这两个函数用来获得和释放CDC对象,以便作图。实验三:模式对话框和控件,熟悉对话框和多种控件的使用 如下图:1 运行AppWizard来产生test03项目从Developer Studio的File菜单中选择New,然后单击Project标签,并选择MFC AppWizard(exe)。除了下面两项以外,其他都用默认设置:选择Single Document和取消对Print And Print Preview的选中。最后的选项及默认类名如下图所示:2 用标志符(ID) IDD_DIALOG1来创建一个新的对话框从Developer Studio的Insert菜单中选择Resource,出现 Insert Resource对话框。在Dialog上单击,然后单击New. Developer Studio将创建一个新的对话框资源,如下图所示3 设置对话框的标题如果我们用鼠标右键在新的对话框中单击,并从弹出的菜单中选择Properties,则屏幕上将出现Dialog Properties对话框。按照下图所示的内容输入新对话框的标题。4 设置对话框风格单击位于Dialog Properties对话框上面的Style标签,然后按下图设置风格属性。5 设置对话框的附加风格单击位于Dialog Properties对话框上面的More Style标签,然后按下图设置风格属性。6 加入对话框控件利用控件工具箱加入每一个控件。(如果控件工具箱不在屏幕上的话,可在任何工具栏上单击右键,然后从列表中选择Controls.)时间控件IP地址控件 用户自定义控件日历控件复文本编辑控件选项卡控件列表控件滑块微调按钮水平滚动条组合框复选框分组框 静态文本选择树状控件 热键进度条垂直滚动条列表框 单选按钮 按钮 动画控件扩展的组合框 编辑框 图象 l Name字段的静态文本控件:静态文本控件只是简单地在屏幕上显示一字符串。l Name编辑控件:编辑控件是在对话框中输入文本的最基本的手段。右键单击该控件,然后选择Properties,将该控件的ID由IDC_EDIT1变为IDC_NAME,其他一些特性都取默认值。l SS Nbr(社会安全号码)编辑控件:这个控件和Name编辑控件是完全一样的,只是要讲其ID改为IDC_SSN。后面我们将利用ClassWizard使之变为数字域。l Bio(简历)编辑控件:这是一个多行编辑控件。将他的ID改为IDC_BIO,然后按下图设置它的属性:l Category分组框:这个控件只用来表明其中的两个单选按钮是属于一组的。键入它的标题Category,使用默认的ID值就行了。l Hourly和Salary单选按钮:将这两个单选按钮定位在Category分组框中,将Hourly按钮的ID设为IDC_CAT,它的其余属性按下图设置。要保证这两个按钮都设置了Style选项卡上的Auto属性(默认设置),并且只有Hourly按钮设置了Group属性。当这些属性都被正确设置了以后,Windows就会保证每次这两个按钮都只能被选中一个。Category分组框对这些按钮的操作没有任何影响。l Insurance分组框:这个控件包含了三个复选框。键入它的标题Insurance.l Life, Disability和Medical复选框:将这些复选框放在Insurance分组框中,它们的属性全都取默认属性,但要把他们的ID 分别改为IDC_LIFE, IDC_DIS和IDC_MED。和单选按钮不同的是,复选框是相互独立的,用户可以设置任意的组合。l Skill组合框:这是本例中三种组合框类型中的第一个组合框。将他的ID改为IDC_SKILL,单击Style标签,设置Type选项为Simple.单击Data标签,在Enter Listbox Item框中加入三项技能(每一行用CtrlEnter结束),如下图所示:这是一个Simple类型的组合框。用户既可以在上面的编辑控件中输入任何内容,也可以用鼠标来选择与之相连的列表框中的条目,或通过上下方向键来选择与之相连的列表框中的内容。l Educ(教育程度)组合框:将它的 ID改为IDC_EDUC,使用默认设置,然后再在Data选项卡上加入三种教育程度。如下图所示借助于这种下拉式组合框,用户既可以在上面的编辑框中输入任何内容,也可以点一下其中的箭头,然后从拉出的列表框中选择条目,或者用上下方向键从与之相连的列表框中选择条目。l Dept(部门)列表框:将它的ID改为IDC_DEPT,它的其余属性全部取默认值。l Lang(语言)组合框:将它的ID改为IDC_LANG,然后单击Style标签,将他的Type选项置成Drop List,并在Data选项卡上加入三种语言(English, French和Spanish)如下图:l OK,Cancel和Special按钮:将Special按钮的ID设为IDC_SPECIAL.7 用ClassWizard为刚刚生成的对话框资源创建对话框类a. 从Developer Studio的View菜单中选择ClassWizard。此时要保证新创建的IDD_DIALOG1对话框仍然在对话框编辑器中被选中,并且test03仍然是Developer Studio的当前项目。b 加入CTest03Dialog类ClassWizard检测到已经创建了一个新的对话框资源但还没有相关联的C+类,因此他会询问是否创建一个新类,如下图所示:接受默认选择Create A New Class然后单击OK, 并按下图填写New Class对话框顶部的各个域:c 加进CTest03Dialog的变量当ClassWizard创建完CTest03Dialog类后,屏幕上就会弹出Class Wizard对话框,请在Member Variables标签上单击,此时屏幕上就会出现Member Variables选项卡,如下图所示:我们需要将数据成员同相应的对话框控件联系起来。为了做到这一点,请在相应的控件ID上单击,然后在单击Add Variable按钮,此时屏幕上会立刻弹出如下图所示的Add Member Variable对话框:请按照下表键入成员变量名,并选择正确的变量类型。然后请单击OK,返回MFC ClassWizard对话框。请对下表列出的每一个控件都重复此过程。控件ID 数据成员 类型IDC_BIO m_strBio CStringIDC_CAT m_nCat intIDC_DEPT m_strDept CStringIDC_DIS m_bInsDis BOOLIDC_EDUC m_strEduc CStringIDC_LANG m_nLang intIDC_LIFE m_bInsLife BOOLIDC_MED m_bInsMed BOOLIDC_NAME m_strName CStringIDC_SKILL m_strSkill CStringIDC_SSN m_nSsn intd. 为Special 按钮加入消息控制函数在ClassWizard对话框的Object Ids列表框中,应该包含有IDC_SPECIAL,请在该条目上单击,然后再在Messages列表框中的BN_CLICKED消息上双击,ClassWizard就会给出一个成员函数名:OnSpecial,并打开如下图所示的Add Member Function对话框:请单击OK, 然后再在MFC ClassWizard对话框中单击Edit Code 按钮,这就将文件Test03Dialog.cpp打开了,并将光标移到了OnSpecial函数处。用下面的带阴影的代码代替已有的代码,以在On Special函数中插入一条TRACE语句void CTest03Dialog:OnSpecial() TRACE(CTest03Dialog:OnSpecialn);TRACE函数用来在调试时输出信息。e利用ClassWizard加入OnInitDialog消息控制函数OnInitDialog函数用来对列表框的选项进行初始化,它响应消息WM_INITDIALOG. 请在ClassWizard对话框中的Object Ids列表框中单击CTest03Dialog, 然后再在Messages列表框中双击WM_INITDIALOG消息,然后再单击MFC ClassWizard对话框中的Edit Code按钮,对OnInitDialog函数进行编辑。键入以下带阴影的代码来代替已有的代码:BOOL CTest03Dialog:OnInitDialog() CListBox * pLB=(CListBox *)GetDlgItem(IDC_DEPT);pLB-InsertString(-1,Documentation);pLB-InsertString(-1,Accounting);pLB-InsertString(-1,Human Relations);pLB-InsertString(-1,Security);return CDialog:OnInitDialog();8 将对话框与视图相连接a. 在ClassWizard中选择CTest03View类。b. 利用ClassWizard加入OnLButtonDown成员函数前面例子中已经做过这一工作,只需简单的在Object IDs列表框中单击CTest03View以选中CTest03View类,然后双击WM_LBUTTONDOWN消息即可。c. 为文件Test03View.cpp中的OnLButtonDown函数编写代码加入下图带阴影的代码,void CTest03View:OnLButtonDown(UINT nFlags, CPoint point) CTest03Dialog dlg;dlg.m_strName=Shakespeare,Will;dlg.m_nSsn=307806636;dlg.m_nCat=1; /0=hourly,1=salarydlg.m_strBio=This person is not a well-motivated tech writer;dlg.m_bInsLife=TRUE; /TRUE是选中状态dlg.m_bInsDis=FALSE;dlg.m_bInsMed=TRUE;dlg.m_strDept=Documentation;dlg.m_strSkill=Writer;dlg.m_nLang=1;int ret=dlg.DoModal(); /启动对话框TRACE(DoModal return=%dn,ret);TRACE(nam=%s,ssn=%d,cat=%dn,dlg.m_strName,dlg.m_nSsn,dlg.m_nCat);TRACE(dept=%s,skill=%s,educ=%sn,dlg.m_strDept,dlg.m_strSkill,dlg.m_strEduc);TRACE(life=%d,dis=%d,med=%d,bio=%sn,dlg.m_bInsLife,dlg.m_bInsDis,dlg.m_bInsMed,dlg.m_strBio);d 向文件test03View.cpp中的虚函数OnDraw中加入代码为了提示用户按下鼠标左键,我们需要重新编写CTest03View:OnDraw函数(该函数的框架已由AppWizard生成),用如下带阴影的代码来替代原有的代码:void CTest03View:OnDraw(CDC* pDC)pDC-TextOut(0,0,Press the left mouse button here.);e 在test03View.cpp文件中加入对对话框类的包含语句上面所介绍的OnLButtonDown函数依赖于对CTest03Dialog类的声明,因此我们必须将包含语句#include “test03Dialog.h”加到CTest03View类的源代码文件(test03View.cpp)的上部,并且将它放在#include “test03View.h”语句之后9 编译和测试该应用程序。运行结果如下图:如果选择工具栏上的调试按钮,则用户在该对话框中的一些改动信息将出现在debug窗口中,比如测试题:1 左键点击视窗区域,弹出一个如下图所示的对话框实验四 基于对话框的应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论