实验3应用程序基本框架.doc_第1页
实验3应用程序基本框架.doc_第2页
实验3应用程序基本框架.doc_第3页
实验3应用程序基本框架.doc_第4页
实验3应用程序基本框架.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

实验3 应用程序基本框架姓名:吕景路 学号20090810320实验目的:掌握MFC的基础知识和类库的组织结构掌握简单的MFC应用程序框架掌握MFC的消息映射和消息处理函数掌握MFC的AppWizard生成的应用程序基本框架结构实验内容:在VC+的Windows编程中,主要有两种方法:一种是利用API函数;另一种是利用Microsoft提供的MFC类库。从上节课的内容我们可以看到,利用Windows API函数进行编程时,用户需要编写大量的代码,编程的工作量较大。本节介绍另外一种编程方法,利用MFC和应用程序向导(AppWizard)来编写Windows应用程序。即首先使用AppWizard生成应用程序的基本框架,然后用ClassWizard来建立应用程序的类、消息映射、消息处理函数或定义控件的属性、事件和方法,最后把应用程序所要求的功能添加到类中。MFC常用类的体系结构如上图说明1、 CObject类是几乎所有MFC类的基类,几乎所有的MFC类都由它直接或间接派生。2、 CCmdTarget类是MFC中开始具有消息循环和消息处理能力的基类,所有的能进行消息循环和消息处理的类都由它派生。3、 CCmdTarget类派生了CWinThread(线程类)、CWnd(窗口类)、CDocument(文档类)和CDocTemplate(文档模板类)。4、 CWinThread派生了CWinApp(应用程序类)、CWnd类派生了CFrameWnd(框架窗口类)和CView(视图类)。5、 简单用程序框架是由CWinApp类和CFrameWnd类搭建的。6、 文档/视图的应用程序框架是由CWinApp类、CFrameWnd类、CView类、CDocument类和CDocTemplate类搭建的。例1、简单应用程序框架举例(ex41)(1) 建立一个Win32 Application类型的工程,工程名为ex41(2) 添加源文件(.cpp文件)。#include /头文件,有AFX小组的影子class CMyApp:public CWinApp/派生自己的应用程序类CMyApppublic:virtual BOOL InitInstance();/重写CWinApp中的虚拟函数InitInstance();BOOL CMyApp:InitInstance()/InitInstance()函数的定义 CFrameWnd*p=new CFrameWnd;/生成窗口类CFrameWnd p-Create(0,MFC);/创建窗口 p-ShowWindow(SW_NORMAL);/显示窗口 p-UpdateWindow();/更新窗口 AfxGetApp()-m_pMainWnd=p;/指明应用程序的主窗口 return TRUE;CMyApp myapp;/生成应用程序类对象myapp,程序由此开始执行(3) 选择菜单Projects-Settings,在打开的对话框中选择 Use MFC in a Static Library或Use MFC in a Shared DLL,表示选择类库的使用方式。(4) 编译链接、运行后会出现一个空白的窗口,程序尚不能对任何消息做出反应,表明程序没有消息处理能力。(5)例2、为例1添加MFC消息映射和消息处理函数(ex42)#include /头文件,有AFX小组的影子class CMyApp:public CWinApp/派生自己的应用程序类CMyApppublic:virtual BOOL InitInstance();/重写CWinApp中的虚拟函数InitInstance();class CMainWnd:public CFrameWndprotected:afx_msg void Function1(WPARAM wParam,LPARAM lParam)MessageBox(左键单击);afx_msg void Function2(WPARAM wParam,LPARAM lParam)MessageBox(右键单击);DECLARE_MESSAGE_MAP();BEGIN_MESSAGE_MAP(CMainWnd,CFrameWnd)ON_MESSAGE(WM_LBUTTONDOWN,Function1)ON_MESSAGE(WM_RBUTTONDOWN,Function2)END_MESSAGE_MAP()BOOL CMyApp:InitInstance()/InitInstance()函数的定义CMainWnd *p=new CMainWnd;/生成窗口类CFrameWndp-Create(0,MFC);/创建窗口p-ShowWindow(SW_NORMAL);/显示窗口p-UpdateWindow();/更新窗口AfxGetApp()-m_pMainWnd=p;/指明应用程序的主窗口return TRUE;CMyApp myapp;/生成应用程序类对象myapp,程序由此开始执行例3、对例2进行改写,采用默认的消息映射和消息处理函数(1) 新建一个Win32 Application类型的工程,工程名为ex43(2) 添加头文件(ex43.h),头文件将添加到工程的头文件夹中。编写头文件,代码见ex43文件夹。(3) 向工程添加源文件ex43.cpp,内容见ex43文件夹。源文件ex43.cpp中的文包含命令#include,只是指名了要包含头文件,还必须设置头文件的路径,使源文件能找到头文件。选择菜单命令Tools-Options,选择Directories页面,在Directories中选择工程ex43所在的路径。(4) 在Projects-Settings中,选择Use MFC in a Static Library或Use MFC in a Shared DLL。(5) 编译、链接并运行程序,程序运行的结果与例2完全相同。例4、利用AppWizard生成Windows应用程序。(1) 启动VC+,新建一个MFC AppWizardexe工程,工程名为ex44(2) 设置MFC AppWizard。选择Single document和中文资源选择None,单击 Next。选择None,不需OLE支持使用默认选择。保留默认状态,单击Next进入下一步。单击Finish按钮,完成向导。(3) 从工作区的Class View中,找到CEx44View的OnDraw()函数,双击OnDraw()函数,便会打开ex44View.cpp文件,并且光标定位于OnDraw()函数处,在其中添加下列代码:pDC-TextOut(30,30, ”Hell, World! This is a MFC Application.”);(4) 编译、链接并运行程序,将在应用程序客户区距离左上角(30,30)的像素点处显示文本信息。例5、实现功能:单击鼠标左键,在鼠标左键单击的位置输出一行文本。(1) 新建基于MFC AppWizardexe的工程ex45,选择单文档。其余采用默认设置。(2) 选择View-Class Wizard或直接在编辑区右键单击选择Class Wizard,打开类向导。类向导的主要功能是管理类,并向工程添加消息映射、成员变量和ActiveX事件等。(3) 在Message Maps标签中,Class Name下拉列表中选择CEx45View类,在下面的Messages列表中,选中WM_LBUTTONDOWN,单击 Add Function按钮,为鼠标左键按下添加消息处理函数,然后单击Edit Code为函数编写代码。(4) 在OnLButtonDown()函数中添加如下代码:void CEx45View:OnLButtonDown(UINT nFlags, CPoint point) CDC *pDC=GetDC();/CDC类,第5章讲述pDC-TextOut(point.x,point.y,hello,5);/在鼠标左键单击的位置输出文本 CView:OnLButtonDown(nFlags, point);(5) 编译、链接并运行程序。实验心得通过此次试验,了解MFC的基础知识和类库的组织结构,MFC的消息映射和消息处理函数,MFC的AppWizard生成的应用程序基本框架结构。MFC比API简单实用,便于程序书写。 也暴露出自己对此不熟练,没掌握,在今后的学习中要更加练习。思考与练习1、搭建简单应用程序框架需要哪些类?搭建文档/视图结构的应用程序框架需要哪些类?答:搭建应用程序框架需要包括4个基本的类:应用程序类、主框架窗口类、文档类、视图类。线程支持类、命令相关类、框架窗口类、文档模板类等可包含在里面。搭建文档/视图结构的应用程序框架需要视图类和框架类。2、在简单应用程序框架中CWinApp类和CframeWnd类分别执行了什么工作?答:CWinApp为应用程序类,MFC 中的主应用程序类封装用于 Windows 操作系统的应用程序的初始化、运行和终止。CWinApp是一个基类,通过它来继承Windows应用程序对象。CFrameWnd类往往用于创建应用程序的主窗口,因为它能很好地支持系统菜单和控制条(工具条、状态条等),为此定义了大量的成员函数和变量。3、消息WM_LBUTTONDOWN的默认消息映射和消息处理函数是什么?这一消息的附加参数IParam中存放着什么信息?消息处理函数的参数如何对这一信息进行分割包装?答:lParam的在低位字指定的X坐标光标。坐标是相对于客户区的左上角。高顺序单词指定的Y坐标光标。坐标是相对于客户区的左上角。4、Invalidate()函数的作用是什么?答:void Invalidate( BOOL bErase = TRUE ); 该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘。Invalidate只是放一个WM_PAINT消息在队列里,不做别的,所以只有当当前函数返回后,进入消息循环,取出WM_PAINT,才执行PAINT,所以不管Invalidate放哪里,都是最后的。5、AppWizard和ClassWizard的作用是什么答:Visu

温馨提示

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

评论

0/150

提交评论