您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++语言程序设计(清华大学郑莉)-(14)
第12章利用MFC开发Windows应用程序教材:《C++程序设计》C++程序设计学习目标理解Windows编程思想,理解MFC库及其结构掌握利用MFCAppwizard创建Windows应用程序的步骤和方法,弄清MFCAppwizard所创建的应用程序中所产生的主要类及其功能、组成文件和程序的框架结构理解消息映射、消息处理函数的概念。掌握利用ClassWizard增加、修改和删除窗口消息处理函数的方法和步骤,并理解程序代码的变化过程和特点掌握文档/视图结构应用程序的开发过程掌握菜单、工具栏、控件的使用掌握对话框应用程序的开发过程以及数据库访问操作C++程序设计Windows应用程序的特点与消息驱动机制基于Windows操作系统的应用程序的特点标准的图形用户界面,比如窗口、菜单、按钮、列表框等。应用程序与硬件无关的特性,对于同一类硬件,不论哪个厂家或哪个型号,程序都无需进行任何修改就可以运行。所有的Windows应用程序都是消息驱动机制,也就是说Windows程序是通过操作系统发送的消息来处理用户的输入。消息驱动是Windows操作系统的一大特色,操作系统将包括用户输入在内的各种事件,以消息的形式发送到目标,目标系统再根据消息的具体内容进行相应的处理。C++程序设计典型的Windows应用程序结构控制台应用程序:在本书第1章~第7章介绍的所有程序均为控制台应用程序。控制台应用程序结构简单,可以不使用MFC类库。基于框架窗口的应用程序:某些应用程序仅需要最小的用户界面和简单的窗口结构,这时可以使用基于框架窗口的方案。基于文档/视图结构的应用程序:文档/视图应用具有较复杂的结构,当然其功能也相应增强。又可分为单文档(SDI)和多文档界面(MDI)两种模式。基于对话框的应用程序。C++程序设计学习MFC的方法不要一开始学习VisualC++就试图了解整个MFC类库。一般的学习方法是,先大体上对MFC有个了解,知道它的概念、组成等之后,从较简单的类入手,由浅入深,循序渐进、日积月累地学习。一开始使用MFC提供的类时,只需要知道它的一些常用的方法、外部接口,不必要去了解它的细节和内部实现。在学到一定程度时,再深入研究,采用继承的方法对原有的类进行修改和扩充,派生出自己所需的类。C++程序设计利用MFCAppWizard创建Windows应用程序利用MFCAppWizard创建一个Windows应用程序的步骤C++程序设计第1步:启动VisualC++6.0,选择【File】菜单下的【New】菜单项,选择【Projects】标签,选择MFCAppWizard(exe)项目类型,在Projectname中输入项目名MyExp,定位于“C:\EXAMPLE\”文件夹中,单击【OK】按钮。第2步:选择【Singledocument】应用类型,即单文档应用程序,其他使用默认值,单击【Next】按钮。第3步:让用户选择程序中是否加入数据库支持,在此使用默认值【None】,单击【Next】按钮。第4步:让用户选择在程序中加入复合文档,自动化支持或ActiveX控件的支持,在此使用默认值,单击【Next】按钮。第5步:让用户选择应用程序的一些特性,在此使用默认值,单击【Next】按钮。第6步:让用户选择应用程序主窗口的风格、在源文件中选择是否加入注释和使用怎样的MFC类库,在此使用默认值,单击【Next】按钮。C++程序设计第7步:用户可以对MFCAppWizard提供的缺省类名、基类名、头文件名、源文件名进行修改,在此使用默认值,单击【Finish】按钮,显示出用户在前面几个步骤中的选择内容,单击【OK】按钮,系统开始创建应用程序,并回到VisualC++6.0的主界面。运行过的应用程序MyExp可以脱离VisualC++6.0单独运行,运行该文档可以双击“C:\EXAMPLE\Debug”下的MyExp.exe文件,运行结果如图12.1所示。可以看到,和所有的Windows应用程序一样,MyExp也包含标题栏、菜单栏、工具栏、状态栏等窗口元素。C++程序设计C++程序设计MFC应用程序的类和文件AppWizard在生成应用程序时,共派生了5个类,单击“MyExpclasses”左侧的“+”展开所有的类,即可显示出应用程序MyExp的5个类。其中:CAboutDlg:关于About对话框的对话框类。CMainFrame:主框架窗口类。CMyExpApp:应用程序类。CMyExpDoc:文档类。CMyExpView:视图类。C++程序设计在工程中,每个类都拥有自己的类定义文件(*.h)和类实现文件(*.cpp)。类定义文件主要保存各种类的定义,类实现文件主要保存各种类的成员函数的实现代码C++程序设计AppWiZard生成的5个派生类类定义和类实现文件C++程序设计文件说明AppWizard在自动生成工程时,除了生成上面介绍的各个类的头文件和实现文件外,还生成了一些为建立应用程序所需要的其他文件。这些文件可以在应用程序生成时指定的路径(C:\EXAMPLE\MyExp)中找到如下图所示C++程序设计C++程序设计关于这些文件详细说明详见教材C++程序设计在窗口的客户区输出文字和图形SDI中显示字符串12.2节中的第1步到第7步。在左边的Workspace下面的ClassView中,点击类CMyExpView左边的+号,双击OnDraw(),如图所示。C++程序设计C++程序设计在右边OnDraw()中加入以下阴影部分的代码,编译、运行结果如图所示。voidCMyExpView::OnDraw(CDC*pDC){CMyExpDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedataherepDC-Rectangle(10,10,250,60);//显示一个矩形框pDC-TextOut(20,20,我的VC++的第一个SDI程序。);//显示文字}C++程序设计C++程序设计程序说明程序对OnDraw()进行了扩展,使用了CDC类的两个成员函数:画矩形的Rectangle()和文字输出TextOut()。CDC类中封装了大量的绘图和文字输出方法。文字信息显示BOOLTextOut(intx,inty,LPCTSTRlpszString);功能:在指定坐标(x,y)处显示字符串lpszString的内容,显示成功返回非0值,否则返回0。说明:坐标原点(0,0)在客户区左上角,Y轴向下。LPCTSTR为常量字符指针类型,BOOL为逻辑类型,两者都是Windows的数据类型。还有COLORREF、POINT、LPPOINT、LPCRECT等都是WindowsAPI中定义的关键字,通常将它们看作Windows的数据类型。C++程序设计画点COLORREFSetPixel(intx,inty,COLORREFcolor);COLORREFSetPixel(POINTpoint,COLORREFcolor);功能:在指定坐标(用参数x,y或点point给出)处按给定颜色(color)画点,返回值为原来此坐标处的颜色。C++程序设计画线画线工作需经两步完成:确定线的起始位置。CPointMoveTo(intx,inty);CPointMoveTo(POINTpoint);功能:将绘图位置移至指定坐标处,返回移动前的绘图位置。确定了线的起点后,使用成员函数LineTo()画线。BOOLLintTo(intx,inty);//参数为终点坐标BOOLLintTo(POINTpoint);功能:画线。C++程序设计绘制矩形BOOLRectangle(intx1,inty1,intx2,inty2);BOOLRectangle(LPCRECTlpRect);功能:绘制一个左上角坐标为(x1,y1),右下角坐标为(x2,y2)的矩形。绘制椭圆BOOLEllipse(intx1,inty1,intx2,inty2);BOOLEllipse(LPCRECTlpRect);功能:绘制一个左上角坐标为(x1,y1),右下角坐标为(x2,y2)的矩形所围住的椭圆C++程序设计Windows消息处理用户输入响应是Windows程序必不可少的功能。例如,当用户在窗口中按下鼠标左键时,Windows系统就会发送WM_LBUTTONDOWN消息给该窗口,如果程序需要对此消息做出反应,必然要调用相应的处理函数,如果没有定义处理函数,则该消息被忽略。编制消息处理函数有时又被称作消息映射或捕获消息。通过消息映射,消息就和它的处理函数对应起来C++程序设计消息处理函数指的是与某个消息对应的函数。消息处理函数的执行是由其对应的消息引发的,某个类对象中的消息处理函数是与这个类对象能够得到的一个消息对应的,当这个消息发生时,这个函数就会被执行。利用ClassWizard可以管理消息处理函数,ClassWizard是一个非常强大有用的工具,可以用ClassWizard来创建新类、定义消息处理函数、覆盖MFC的虚拟函数,从对话框、表单视图或记录视图的控件中获取数据。C++程序设计可以用三种方法来激活ClassWizard对话框:选择【View】菜单中的【ClassWizard】菜单项;直接按下Ctrl+W键;在代码编辑窗口中单击鼠标右键(此时,代码编辑窗口中必须有打开的文件),在弹出菜单中选择【ClassWizard】菜单项。C++程序设计弹出【MFCClassWizard】对话框在【MFCClassWizard】对话框上面共有五个选项卡,分别说明如下:【MessageMaps】选项卡用于进行消息映射的处理;【MemberVariables】选项卡用于为对话框中的控件所用到的类创建成员变量;【Automation】选项卡帮助用户管理与OLE自动化相联系的方法和属性;【ActiveXEvents】选项卡帮助用户管理ActiveX类支持的ActiveX事件;【ClassInfo】选项卡显示类的一般信息,包括定义它的头文件和源文件、类名以及与之相联系的基类。C++程序设计Windows消息消息就是操作系统通知应用程序某件事情已经发生的一种方式。例如,当用户移动或双击鼠标、改变窗口大小等,都将向适当的窗口发送消息,一个窗口可以向另一个窗口发送消息。Windows系统中的消息主要有三种类型:标准的Windows消息、控件消息和命令消息C++程序设计标准的Windows消息所有以WM_为前缀的消息都是标准的Windows消息(WM_COMMAND消息除外),如WM_PAINT、WM_QUIT等,这些消息通常含有用于确定如何对消息进行处理的一些参数。标准的Windows消息一般由窗口对象和视图对象进行处理C++程序设计标准的Windows消息可以分为三类,即键盘消息、鼠标消息和窗口消息鼠标消息无论何时移动鼠标或操作鼠标按键,Windows便产生一条或多条消息并将其发送给位于鼠标光标下的窗口键盘消息键盘消息的响应函数是OnKeyDown(),用于处理WM_KEYDOWN消息(按下键盘上的按键),该函数的原型为:afx_msgOnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags);C++程序设计窗口消息所有窗口的变化,包括窗口内容重绘WM_PAINT,窗口最大化WM_MAXIMIZE,窗口最小化WM_MINIMIZE,窗口重定义大小WM_RESIZE,窗口滚动WM_HSCROLL、WM_VSCROLL,窗口定时WM_TIMER等消息所带参数各不相同C++程序设计控件消息控件是一个小的子窗口,属于其他窗口(如对话框等),能够接受操作并象父窗口发送消息。常见的控件有按钮、列表框、编辑框、复合框、滚动条等发送控
本文标题:C++语言程序设计(清华大学郑莉)-(14)
链接地址:https://www.777doc.com/doc-5064304 .html