MFCC++讲义教程课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《MFCC++讲义教程课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFCC 讲义 教程 课件
- 资源描述:
-
1、MFCC+教程课件精品 Windows API(Application Programming Interface)是Windows操作系统与应用程序之间的标准接口,它提供了上千个标准函数、宏和数据结构的定义。在使用Visual C+、Visual Basic和Delphi编程时都可以调用Windows API函数,Windows应用程序可通过调用标准Windows API函数使用系统提供的功能。Windows API函数定义在一些DLL动态链接库中,其中最主要的DLL是User32.dll、Gdi32.dll和Kernel32.dll三个库文件。1.1 关于关于API和和SDK 传统SDK编
2、程:程序员通过调用API函数,自己动手、按部就班地实现程序各部分的功能。SDK应用程序的结构比较清晰,但程序员必须编写所有的功能代码。利用Visual C+编写一个类SDK应用程序:首先利用Win32 Application向导建立一个Windows应用程序框架,然后根据需要可以向程序项目中添加一些头文件、实现源文件和资源文件,并编写具体的程序代码。例例 编写一个名为Hello的类SDK应用程序,当单击鼠标时通过调用API函数,以弹出一个提示信息对话框。1执行“File|New”菜单命令,在New对话框的Project页面中选择Win32 Application项目类型,输入程序名Hello。
3、在向导第1步选择“A typital“Hello world!”application”项,单击Finish按钮。2在窗口函数WndProc()的消息处理分支switch-case结构中添加WM_LBUTTONDOWN鼠标单击消息及其处理代码:case WM_LBUTTONDOWN:MessageBox(NULL,You pressed the l e f t b u t t o n o f mouse!,Message,NULL);break;SDK应用程序结构:l一个由API函数构造的Windows程序的功能由三个部分组成:入口函数、窗口函数和Windows系统。l每一个程序都有一个主函数
4、,WinMain()函数就是Windows程序的入口主函数。该函数的主要任务是完成一些初始化工作并维护一个消息循环。当消息循环结束后,就退出了WinMain()函数,也就退出了应用程序。此外,WinMain()函数还负责完成窗口的注册、创建和显示。lWindows程序以窗口的形式存在,在不同窗口之间传递消息是Windows和应用程序进行交流的主要形式。程序具体功能由不同的窗口函数实现。1.2 句柄句柄 在Windows中,用句柄(句柄(Handle)标识应用程序中不同的对象和同类对象中不同的实例,如一个具体的窗口、按钮、输出设备、画笔和文件等。通过句柄可以获得相应的对象信息。常用的句柄类型有:
5、HWND、HINSTANCE、HDC、HCURSOR、HICON、HMENU等。句柄常作为Windows消息和API函数的参数,在采用API方法编写Windows应用程序时要经常使用句柄。而采用MFC方法编写Windows应用程序时,由于对应的MFC类已对句柄进行了封装,大多数情况下不再需要访问句柄。获取获取MFC类对象的句柄的两种方法:类对象的句柄的两种方法:l通过访问类的public属性成员变量,如类CWnd的成员变量m_hWnd就是一个窗口对象的句柄。l先定义一个句柄,然后调用MFC类的成员函数Attach()将句柄与一个MFC类对象联系在一起,此时的句柄就成为该MFC类对象的句柄。在退
6、出对象作用域之前,调用成员函数Detach()将句柄和对象进行分离。如下所示:CWnd myWnd;HWND hWnd;myWnd.Attach(hWnd);.myWnd.Detach();l所谓消息消息就是用于描述某个事件发生的信息,而事事件件是对于Windows的某种操作。l事件和消息密切相关,事件是因,消息是果,事件产生消息,消息对应事件。所谓消息的响应,其实质就是事件的响应。l消息驱动消息驱动是Windows应用程序的核心,所有的外部响应(如键盘、鼠标和计时器等)都被Windows先拦截,转换成消息后再发送到应用程序中的目标对象,应用程序根据消息的具体内容进行处理。l消息不仅可由Win
7、dows发出,它也可由应用程序本身或其它程序产生。Windows为每一个应用程序都维护一个或多个消息队列消息队列,发送到每个程序窗口的消息都排成一个队列。1.3 事件和事件和消息消息 Windows消息消息分为三种类型:分为三种类型:l标 准标 准 W i n d o w s 消 息消 息:以 W M _ 前 缀(但 不 包 括WM_COMMAND)开始的消息,包括鼠标消息、键盘消息和窗口消息,如WM_MOVE、WM_PAINT等。l控件通知(控件通知(Control Notification)消息消息:对控件操作引起的 消 息,是 控 件 和 子 窗 口 向 其 父 窗 口 发 出 的WM_
8、COMMAND通知消息。例如,当用户修改了编辑控件 中 的 文 本 后,编 辑 控 件 向 其 父 窗 口 发 送WM_COMMAND通知消息。l命令(命令(Command)消息消息:由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。命令消息与其它消息不同,它可被更广泛的的对象如文档、文档模板、应用程序对象、窗口和视图等处理。typedef struct tagMSG HWND hWnd;/目标窗口句柄 UINT message;/消息标识 WPARAM wParam;/消息参数1(附加信息,16位)LPARAM lParam;/消息参数2(附加信息,32位)DWORD
9、 time;/消息发送时间 POINT pt;/消息发送时鼠标的屏幕坐标 MSG;消息用消息用MSG结构表示:结构表示:例例 为程序Hello添加键盘消息处理功能,判断当前按下的键是不是A或a键,并给出相应的提示。打开程序项目Hello,在文件Hello.cpp的窗口函数WndProc()的switch消息处理分支中添加键盘消息的处理代码:case WM_KEYDOWN:/处理键盘消息 if(wParam=0 x41)/A或a键的虚键码为0 x41HMessageBox(NULL,The key you pressed is A or a!,KEYDOWN,NULL);else Message
10、Box(NULL,The key you pressed is not A or a!,KEYDOWN,NULL);break;利用Windows API开发程序的用户有这样的体会,即使开发一个简单的Windows应用程序也需要对Windows的编程原理有很深刻的认识,需要手工编写冗长的代码。由于程序的出错率是随着代码长度的增加呈几何级数增长的,而且当程序长度逐渐膨胀时,调试程序会变得越来越困难。因此,传统的Windows应用程序设计需要程序员有极大的耐心和丰富的编程经验。Visual C+捆绑了微软的基础类MFC,编程时我们就可以利用类的可重用性和可扩充性,大大降低Windows应用程序设计
11、的难度和工作量。2MFC的基本原理和使用方法的基本原理和使用方法 2.1MFC类(对应教材的第五章全部内容)类(对应教材的第五章全部内容)2.2MFC应用程序框架应用程序框架 2.3MFC消息管理消息管理 2.4MFC宏宏一、一、MFC概述(教材概述(教材1 1节)节)类库是一个可以在应用程序中使用的相互关联的C+类的集合。MFC作为一个Windows编程类库,它包含了200多个类,封装了Windows的大部分编程对象以及与它们有关的操作。虽然程序在功能上千差万别,但从本质上看,都可以分为用户界面设计、文件操作、数据库访问及多媒体使用等几部分,这些都可以通过一些类来实现。MFC提供了一个标准化
12、的程序结构,使开发人员不必从头设计一个Windows应用程序。MFC实际上是一个庞大的文件库,它由几百个执行文件和源代码文件(如H文件)组成。2.1MFC类(对应教材的第五章全部内容)类(对应教材的第五章全部内容)在Microsoft推出Windows3.0之后,Windows操作系统受到越来越多的人的青睐。因此当时学习Windows程序设计便成为程序员的显学。但是不久,开发人员发现撰写Windows应用程序是重复、厌烦的过程,而且效率极低。因为每一个窗口都需要在窗口函数中处理大量的消息,导致出现大量的重复代码。随着C+语言的盛行,开发人员发现利用C+语言的特性来封装Windows API和W
13、indows应用程序的开发可以明显地提高程序的开发效率。于是,人们对这种新的开发模式有了强烈的需求。在这种情况下,Microsoft和其他一些大的厂商开始从事Windows框架的设计。于是,MFC就是在这种背景下诞生了。MFC英文全称是Microsoft Fundation Class Library,即微软基础类库。从其产生至今已经发展了十几个版本,表5-1显示的MFC的发展过程。MFCVisual C+MFC 1.0版本Microsoft C/C+7.0版本MFC 2.0版本Visual C+1.0版本MFC 2.5版本Visual C+1.5版本MFC 3.0版本Visual C+2.0
14、版本MFC 3.1版本Visual C+2.1版本MFC 3.2版本Visual C+2.2版本MFC 4.0版本Visual C+4.0版本MFC 4.1版本Visual C+4.1版本MFC 4.2版本Visual C+4.2版本MFC 4.21版本Visual C+0版本MFC 6.0版本Visual C+6.0版本MFC 7.0版本Visual C+.NET 2002版本MFC 7.1版本Visual C+.NET 2003版本MFC 8.0版本Visual C+.NET 2005版本 MFC中的类按照功能的不同,可以分为不同的层次。图5-1显示了MFC中的所有类及类层次。二、二、MF
15、C类库层次(教材类库层次(教材2 2节)节)MFC中的数据类型与Windows SDK开发包中的数据类型多数是一致的。但也有一些数据类型是MFC独有的。表5-2列出了MFC中使用的数据类型。数据类型数据类型描述描述BOOL 布尔值,取值范围TRUE和FALSEBSTR32位字符指针BYTE8位无符号整数COLORREF用作颜色值的32位数值DWORD32位无符号整数,或者段的地址和与之相关的偏移量LONG32位有符号整数LPARAM32位值,作为窗口函数或回调函数的参数LPCSTR 指向字符串常量的32位指针LPSTR32位字符串指针LPCTSTR 指向兼容Unicode和DBCS字符集的字符
16、串常量32位指针LPTSTR指向兼容Unicode和DBCS字符集的字符串32位指针LPVOID指向一个未定义类型的32位指针LRESULT窗口函数或回调函数返回的32位值 UINT32位无符号整数 WNDPROC指向一个窗口函数的32位指针WORD16位无符号整数WPARAM作为参数传递给窗口函数或回调函数的值POSITION用于标记集合中一个元素的位置LPCRECT指向一个RECT结构体常量的32位指针 其中,表格中列出的最后两个数据类型是MFC所特有的。三、三、MFC常用数据类型(教材常用数据类型(教材3 3节)节)在MFC类库中,除了提供实现各种功能的类外,还提供了许多全局函数。如下所
17、示:1MFC诊断函数诊断函数为了调试的方便,MFC提供了多个诊断函数,如表5-3所示。函数名称函数名称描述描述AfxCheckMemory 检查当前分配的所有内存的完整性AfxDump 如果在调试器内调用,则转存对象的状态AfxDumpStack生成当前栈的一个映像,该函数通常被静态链接AfxEnableMemoryTracking 打开或关闭内存跟踪AfxIsMemoryBlock 检验一个内存块是否被正确的分配AfxIsValidString检验一个字符串指针是否有效AfxSetAllocHook允许在每次进行内存分配时调用一个函数AfxDoForAllClasses对所有从CObject
18、继承的支持运行时检查的类执行一个特定的功能AfxDoForAllObjects对所有从CObject继承的用new分配内存对象执行一个指定的功能四、四、MFC全局函数(教材全局函数(教材4 4节)节)2异常抛出函数异常抛出函数 为了使程序更具有健壮性,MFC提供了多个异常抛出函数,如表5-4所示。函数名称函数名称描述描述AfxThrowArchiveException抛出一个档案异常AfxThrowFileException抛出一个文件异常AfxThrowMemoryException抛出一个内存异常AfxThrowNotSupportedException抛出一个不支持的异常AfxThrow
19、ResourceException抛出一个Windows未找到资源异常AfxThrowUserException在用户初始化的程序动作中抛出一个异常AfxThrowOleException抛出一个OLE异常AfxThrowOleDispatchException在OLE自动化函数内抛出异常AfxThrowDaoException从代码中抛出一个CDaoException异常AfxThrowDBException从代码中抛出一个CDBException异常 3字符串格式和消息框函数字符串格式和消息框函数 MFC除了提供CString类操作字符串外,还提供了两个全局函数,如表5-5所示。函数名称函
20、数名称描述描述AfxFormatString1 用一个字符串替换给定字符串中的格式字符“%1”AfxFormatString2用两个字符串替换给定字符串中两个格式字符“%1”和“%2”AfxMessageBox显示一个消息框 4应用程序信息和管理函数应用程序信息和管理函数 MFC提供与应用程序有关的全局函数如表5-6所示。其中,有许多函数在开发应用程序过程中经常使用。函数名称函数名称描述描述AfxFreeLibrary减少已调入内存的动态链接库模块的引用计数,当引用计数减到0时,该模块就会被释放AfxGetApp返回应用程序对象CWinApp的一个指针AfxGetAppName返回应用程序的名
21、称AfxGetInstanceHandle 返回应用程序实例句柄AfxGetMainWnd 返回指向非OLE应用程序的当前主窗口指针,或者是服务器程序的线厂框架窗口AfxGetResourceHandle返回应用程序默认的资源AfxInitRichEdit为应用程序初始化RichEdit控件AfxLoadLibrary调入一个DLL模块,同时返回一个句柄,通过该句柄可以获得DLL中函数的地址AfxRegisterWndClass 注册一个Windows窗口类,用它来代替MFC自动注册的窗口类AfxSocketInit在应用程序的InitInstance方法中调用,用于初始化套接字AfxSetR
22、esourceHandle 设置应用程序默认的资源句柄AfxRegisterClass在使用MFC的DLL中注册窗口类AfxBeginThread创建一个新的线程AfxEndThread结束一个线程AfxGetThread获取指向当前CWinThread对象的指针AfxWinInit由MFC提供的WinMain函数直接调用,在GUI应用程序中,用于初始化MFC 集合类帮助函数集合类帮助函数集合类帮助函数多用于数组操作,表5-7列出了MFC提供的集合类帮助函数。函数名称函数名称描述描述CompareElements比较元素是否相同ConstructElements当生成一个元素时必须实现的动作C
23、opyElements将元素从一个数组中拷贝到另一个数组中DestructElements当销毁一个数组时需要实现的动作DumpElements提供了面向流的诊断输出HashKey计算一个Hash键SerializeElements将元素保存到文件中,或从文件中获得元素6记录字段交换函数记录字段交换函数记录字段交换函数用于记录集数据与变量的交互。表5-8列出了与记录字段相关的函数。函数名称函数名称描述描述RFX_Binary传送CByteArray类型的字节数RFX_Bool传送布儿数据RFX_Byte传送单个的字节数据RFX_Date传送CTime或TIMESTAMP_STRUCT类型的时间
24、和日期数据RFX_Double传送双精度浮点数据RFX_Int传送整型数据RFX_Long传送长整型数据RFX_LongBinary通过CLongBinary类的对象传送二进制大对象RFX_Single传送浮点数据RFX_Text传送字符串数据RFX_Binary_Bulk传送二进制数据的数组RFX_Bool_Bulk传送布尔数据的数组RFX_Date_Bulk传送TIMESTAMP_STRUCT数据的数组RFX_Double_Bulk传送双精度浮点数据数组RFX_Int_Bulk传送整型数据数组RFX_Long_Bulk传送长整型数据数组RFX_Single_Bulk传送浮点数据数组RFX_
25、Text_Bulk传送LPSTR数据数组7OLE相关函数相关函数为了支持OLE技术,MFC对OLE进行了封装,同时提供了一些全局函数用于OLE操作,如表5-9所示。函数名称函数名称描述描述AfxOleInit初始化OLE库AfxOleCanExitApp判断应用程序是否能够结束AfxOleGetMessageFilter获取应用程序当前的消息过滤器AfxOleGetUserCtrl获取当前的用户控制标记AfxOleSetUserCtrl设置或清除用户控制标记AfxOleLockApp增加应用程序中活动对象的全局计数AfxOleUnlockApp减少应用程序中活动对象的全局计数AfxOleReg
展开阅读全文