第10 VC++6.0编程入门.ppt_第1页
第10 VC++6.0编程入门.ppt_第2页
第10 VC++6.0编程入门.ppt_第3页
第10 VC++6.0编程入门.ppt_第4页
第10 VC++6.0编程入门.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、2020年8月15日1时44分,1,C+面向对象程序设计,普通高等教育“十一五”国家级规划教材 中国高等院校计算机基础教育课程体系规划教材,湖南工业大学 计算机与通信学院,2020年8月15日1时44分,2,第10讲 VC+6.0编程入门,1 授课内容 VC+6.0编程入门。主要内容: 1WINDOWS编程的基本思想 2文档/视图类介绍、基于文档/视图结构的程序设计介绍; 3消息映射及消息处理函数; 4MFC介绍及常用类,2020年8月15日1时44分,3,第10讲 VC+6.0编程入门,2 授课要求 1理解WINDOWS的基本编程思想; 2熟悉基于文档/视图结构的程序设计; 3了解消息传递机

2、制,掌握编制菜单、工具栏和鼠标等消息处理函数; 4掌握在视图中输出信息; 5了解MFC程序的组成及各部分的作用; 6熟悉MFC中常用的几个类的使用。,2020年8月15日1时44分,4,第10讲 VC+6.0编程入门,3 授课重点 1重点是消息映射及消息处理函数。 4 授课难点 1难点是MFC程序的组成及各部分的作用。,2020年8月15日1时44分,5,Windows操作系统是一个多任务、面向对象的图形操作系统。 在Windows操作环境中, Windows应用程序采用“基于消息的事件驱动”运行机制,这是它与过去的面向过程的应用程序机制的不同之处。,面向过程的编程方式:程序执行的流程遵从程序

3、员预先规定的路径. 面向对象的Windows程序执行顺序取决于事件和消息发生的顺序。 Windows应用程序设计的重点是编写事件和消息的处理程序。,1WINDOWS编程的基本思想,2020年8月15日1时44分,6,1WINDOWS编程的基本思想,(1)消息驱动 所有的Windows应用程序都是消息驱动(也叫事件驱动)的。 消息驱动围绕着消息的产生与处理展开,依靠消息循环机制来实现。程序开始运行时,处于等待消息状态,然后取得消息并对其做出相应的反应(即执行程序,也就是消息处理函数),处理完后又返回处于等待消息状态。,2020年8月15日1时44分,7,Windows应用程序,操作系统,计算机硬

4、件之间的相互关系,2020年8月15日1时44分,8,消息就是操作系统通知应用程序某件事情已经发生的一种方式。 消息处理是windows应用程序的核心。 采用消息驱动的程序工作流程如图1所示。,图1,2020年8月15日1时44分,9,消息队列,USER 用户交互内核,2020年8月15日1时44分,10,N,N,Y,Y,Windows应用程序的执行过程,2020年8月15日1时44分,11,(2)消息的种类,在windows系统中,大约有近千种消息。 消息大致可以分为3类: (a)标准的widows消息 键盘消息、鼠标消息、窗口消息。 (b)控件消息 从控件传给系统的消息(BN_CLICK)

5、,由系统发送给控件的消息。 (c)命令消息 菜单项、工具栏按钮、加速键等用户界面对象发送的WM_ COMMAND(ID_FILE_OPEN)消息。,2020年8月15日1时44分,12,(3)消息的发送和接收,Windows操作系统提供了消息循环机制,通过消息队列来缓存所有消息,然后根据消息的目的地分发到不同的应用程序。各应用程序取得消息,然后进行处理,处理完后,又处于接收消息状态。 在MFC程序中,消息映射的宏为: BEGIN_MESSAGE_MAP:用于声明消息映射的开始。 END_MESSAGE_MAP:用于声明消息映射的结束。,2020年8月15日1时44分,13,1. 所有应用程序的

6、入口,类似Main函数, 2. 完成一系列的定义和初始化,并产生消息循环,WinMain()函数,相当于main(),2020年8月15日1时44分,14,窗口是由应用程序创建的一个用于接收用户输入和显示输出的矩形区域。是系统管理应用程序的基本单位。 窗口由“非客户区”和“客户区”组成。 非客户区由系统绘制,包括菜单、工具栏、最大化按钮等。客户区由应用程序绘制,用于输出数据和接受用户的输入。 编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。 每个Windows应用程序都有一个消息队列,Win

7、dows系统会把属于各个应用程序的消息放入各自的消息队列,应用程序不断地从自己的消息队列中获取消息并把它们发送到相应的窗口处理过程。这个循环(取消息-处理消息)一直到用户以某种方式(如:关闭应用程序的主窗口)结束程序而终止。,窗口,2020年8月15日1时44分,15,2MFC编程,Microsoft提供了一个基础类库MFC(Microsoft Foundation Class),其中包含用来开发C+应用程序和Windows应用程序的一组类。MFC封装了大部分的Windows的API(Appliction Programming Interface,应用程序接口)。 使用MFC,可以大大简化W

8、indows编程工作。目前,绝大部分的Windows应用程序都是基于MFC编写。 MFC中的类可分为两种:CObject类的派生类和非CObject派生类。 CObject是大多数MFC类的最终基类,它支持串行化数据和获得一个类的运行时信息。,2020年8月15日1时44分,16,2MFC编程,MFC将Windows应用程序从开始运行、消息传递到结束运行所需的各步骤都封装在CWinApp类中,CWinApp类表示MFC应用程序的应用对象。CWinApp类从CObject类的子类CWinThread类(定义MFC内的线程行为)派生。 一个MFC应用程序有且只有一个从WinApp类派生的全局应用程

9、序对象,此对象在运行时控制应用程序中所有其他对象的活动。,2020年8月15日1时44分,17,2MFC编程,比如:建立一个单文档界面(SDI)应用程序kj16_1,则: (a)产生一个应用类CKj16_1App,即: class CKj16_1App : public CWinApp (b)在kj16_1.cpp文件中,有一个CKj16_1App的对象theApp,即: CKj16_1App theApp; (c)程序的运行就是从theApp对象的构造函数处开始执行。,2020年8月15日1时44分,18,2MFC编程,MFC程序运行: MFC应用程序首先调用由框架提供的标准WinMain(

10、)函数。 在WinMain( )函数中,先初始化唯一的全局对象theApp,然后调用其有CWinApp类继承的Run()成员函数,进入消息循环。 程序结束时调用CWinApp的ExitInstance()函数退出。,2020年8月15日1时44分,19,3单文档界面(SDI)应用程序,(1)由开发工具的AppWizard自动生成的单文档界面的应用程序包含5个类: CaboutDlg about对话框类 CMainFrame 框架类,由CFrameWnd派生 CmyApp 应用程序类,由CWinApp派生 CmyDoc 文档类,由CDocument派生 CmyView 视图类,由CView派生,

11、2020年8月15日1时44分,20,(2)文档/视图概念,文档可视为一个应用程序的数据元素的集合,视图是数据的用户界面,即用于数据显示。 A视图类(CView) 视图类中的主要函数有: (a)GetDocument()成员函数:用于从文档类中获取数据值 (b)OnDraw(CDC* pDC)方法:完成屏幕显示、打印和打印预览功能 (c)OnInitialUpdate()虚成员函数:在应用程序启动 ,或用户从File菜单中选择了New或者Open选项时被调用。 从视图类访问文档类中的数据的方法: CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

12、 /在OnDraw中,2020年8月15日1时44分,21,B文档类(CDocument),主要成员函数: (a)OnNewDocument:初始化文档对象的数据成员。 (b)AddView:将视图添加到文档中。 (c)GetPathName:返回文档数据文件的路径名。 (d)UpdateAllViews:通知所有视图文档已被修改的消息。 (e)OnCloseDocument:关闭文档时调用。 (f)OnOpenDocument:打开已存在的文档时调用。 (g)OnSaveDocument:保存文档到磁盘时调用。 (h)GetFile:返回所需要的CFile对象指针。 在文档类中用到视图,可以

13、: CClientDC dc(this); dc.TextOut(15,50,Hello world!);,2020年8月15日1时44分,22,(3)添加菜单及消息响应函数,A在菜单资源中,可添加和修改菜单 鼠标左键双击,就可添加和修改菜单项。 每个菜单需要采用合适的名称和ID号。,如果在菜单属性中选上“弹出”,则菜单项右边将弹出子菜单。,2020年8月15日1时44分,23,B加入消息响应函数 方法:主菜单/查看/建立类向导,出现图2所示的界面,在界面中,选择:class name、Object ID、Message,然后点击Add Function即可。,图2,2020年8月15日1时4

14、4分,24,比如:添加一个menu为Test,其消息响应函数为: MessageBox(“Click Me.”); /弹出一个对话框 注意: 菜单选择消息可以放在SDI的4个类中的任何一个类中处理,此时,消息在SDI各类中的传递过程为:视图类文档类 -框架类-应用程序类。,2020年8月15日1时44分,25,(4)添加工具栏,A添加工具栏图标的方法 (a)在资源栏中选择Toolbar,然后进行编辑。编辑时,可以在工具栏上画上图标或写上文字。 (b)还可以采用位图做工具按钮。方法:在资源栏中添加位图资源;选中此位图资源;在主菜单中,选“image/Toolbar Editor”,再选择大小,确

15、定即可。,注意:工具栏上的位图不能大于16色(否则显示不出)。,2020年8月15日1时44分,26,A添加工具栏图标的方法,(c)另外,还可使用拷贝/粘贴(使用主菜单的工具栏上的“拷贝/粘贴”)的方式把其他地方的位图粘贴到此工具栏上。如图3所示。,图3,2020年8月15日1时44分,27,B把新建的工具栏加入到主界面上,修改主框架程序MainFrm.cpp中的OnCreate函数。 int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) /其他代码省略。 if (!m_wndToolBar.CreateEx(this, TBSTYLE_

16、FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) | !m_wndToolBar.LoadToolBar( / IDB_BITMAP1) /不同的工具栏 IDB_BITMAP4) TRACE0(Failed to create toolbarn); return -1; / fail to create /其他代码省略。 return 0; ,2020年8月15日1时44分,28,C添加工具栏消息响应函数,每个工具有个ID号,然后象添加菜

17、单消息响应函数一样添加工具栏消息响应函数。 比如:void CKj16_1View:Onface16se() / TODO: Add your command handler code here MessageBox(Face 16色.); ,2020年8月15日1时44分,29,(5)在视图窗口中输出文字和图形,找到视图类,通过Workspace的ClassView迅速定位到OnDraw函数,并加入代码: void CMyView:OnDraw(CDC* pDC) CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add dr

18、aw code for native data here pDC-Rectangle(10,10,110,110); pDC-TextOut(15,50,Hello world!); ,2020年8月15日1时44分,30,CDC类的重要成员函数,(a)文字信息显示 BOOL TextOut(int x, int y, LPCTSTR lpszString) (b)画线 CPoint MoveTo ( int x, int y ); BOOL LineTo ( int x, int y ); (c)绘制矩形 BOOL Rectangle ( int x1, int y1, int x2, int y2 ); (d)获取客户区的坐标 void GetClientRect( LPRECT lpRect ); (e)如何获取CDC的环境(指针) 在OnDraw中 void CMyView:OnDraw(CDC* pDC) pDC-Rectangle(10,10,110,110); pDC-TextOut(15,50,Hello world!); ,2020年8月15日1时44分,31,CDC类的重要成员函数,在其它函数中 CClientDC dc(this); dc.Rectangle(10,10,110,110); dc.TextOut(15,50

温馨提示

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

评论

0/150

提交评论