《VC++多媒体编程.ppt》由会员分享,可在线阅读,更多相关《VC++多媒体编程.ppt(39页珍藏版)》请在优知文库上搜索。
1、MMTMMTMMTMMTMMTMMT第十二讲第十二讲 VC+VC+多媒体编程多媒体编程YANGZHOUDAXUE类和对象 在现实世界中,经常有属于同一类的对象。在面向对象软件中,也有很多共享相同特征的不同的对象。可以利用这些对象的相同特征为它们建立一个类。定义:类是定义同一类所有对象的变量和方法的原型。 类一般包含数据成员和成员函数。成员函数是用来对数据成员进行操作的,又称为“方法”。 类的定义格式一般地分为说明部分和实现部分。说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明。实现部分是用来对成员函数的定义。二者一般分开定义。 类的一般定义格式如下:类的一般定义格式如下: c
2、lassclass public: public: private: private: ; ; classclass是定义类的关键字。关键字是定义类的关键字。关键字public,privatepublic,private,protectedprotected被被称为访问权限修饰符。它们在类体内出现的先后顺序无关,并且允称为访问权限修饰符。它们在类体内出现的先后顺序无关,并且允许多次出现。许多次出现。 是类定义中的实现部分,包含所有在类体是类定义中的实现部分,包含所有在类体内说明的函数的定义。允许一个成员函数的类体内定义。内说明的函数的定义。允许一个成员函数的类体内定义。 一个日期类定义的例子:
3、一个日期类定义的例子:/类的说明部分类的说明部分 classTDatepublic:voidSetDate(inty,intm,intd);voidPrint();private:intyear,month,day; 其中其中public部分可被对象访问,部分可被对象访问,private (或(或protected)部分不可被对象访问。部分不可被对象访问。 /类的实现部分类的实现部分 void TDate:SetDate(int y, int m, int d) year = y; month = m; day = d; void TDate:Print(); coutyear.month.d
4、ayendl; 在在VC+中,类的说明部分和实现部分不但分开定义,而且在不中,类的说明部分和实现部分不但分开定义,而且在不同的文件中。前者文件后缀为同的文件中。前者文件后缀为.h,后者文件后缀为,后者文件后缀为.cpp。文件名。文件名相同。相同。类的使用类的使用类一定是通过定义它的对象(实例化)来使用的。类一定是通过定义它的对象(实例化)来使用的。voidmain() TDateToday;Today.SetDate(2008,8,8); Today.Print();构造函数和析构函数构造函数和析构函数 在类中,函数名和类名相同的函数称为构造函数,在定义在类中,函数名和类名相同的函数称为构造函
5、数,在定义对象时自动执行。对象时自动执行。 函数名为函数名为 类名类名 的函数称为析构函数,在释放对象时自动的函数称为析构函数,在释放对象时自动执行。执行。classTDatepublic:voidTDate();voidSetDate(inty,intm,intd);voidPrint();voidTDate();private:intyear,month,day; voidTDate:TDate()year=2009;month=4;day=1;voidTDate:TDate() 当执行当执行TDate Today;时,时,Today就会初始化为就会初始化为2009.4.1。 在类中,构造
6、函数和析构函数是必须的。如果不定义,系统在类中,构造函数和析构函数是必须的。如果不定义,系统会自动生成构造和析构空函数。会自动生成构造和析构空函数。 构造函数用来做初始化,析构函数一般用来做收尾工作。构造函数用来做初始化,析构函数一般用来做收尾工作。 构造函数可以带参数。构造函数可以带参数。classTDatepublic:voidTDate(inty,intm,intd);voidPrint();voidTDate();private:intyear,month,day; voidTDate:TDate(inty,intm,intd)year=y;month=m;day=d;定义对象时:定义
7、对象时:TDate Today(2009,4,1);继承继承 类的继承性就是子类自动共享父类的类的继承性就是子类自动共享父类的数据数据和和方法方法的机制,的机制,表示类之间的关系。定义子类的语法如下:表示类之间的关系。定义子类的语法如下:class : .其中继承方式为其中继承方式为public,private或或protected。public继承继承protected继承继承private继承继承publicpublicpublicprotectedpublicprivateprotectedprotectedprotectedprotectedprotectedprivateprivat
8、e不可见不可见private不可见不可见private不可见不可见1 1、数据和函数都被继承。、数据和函数都被继承。2 2、建立对象时,首先调用基类的构造函数,然后调用派生类的构、建立对象时,首先调用基类的构造函数,然后调用派生类的构造函数。造函数。3 3、对象析构时,与构造时相反,先执行派生类的析构函数体,最、对象析构时,与构造时相反,先执行派生类的析构函数体,最后是执行基类的析构函数。后是执行基类的析构函数。4 4、构造函数和析构函数不可继承。、构造函数和析构函数不可继承。5 5、可以一级一级继承下去。、可以一级一级继承下去。#includeclassSampleprotected:int
9、x,y;public:Sample()x=1;y=2;voiddisp();Sample();voidSample:disp()coutx=x,y=yendl;classson:publicSampleprivate:intz;public:son(intc)z=c;voidadd()coutthesumisx+y+zendl;son();voidmain()Samples1;s1.disp();sons2(5);s2.disp();s2.add();运行结果:运行结果:x=1,y=2x=1,y=2thesumis8封装:降低耦合度;类的内部可以自由修改;类具有对外封装:降低耦合度;类的内部可
10、以自由修改;类具有对外的清晰接口。的清晰接口。多态:不同的对象可以执行相同的动作,但通过他们自己多态:不同的对象可以执行相同的动作,但通过他们自己的实现代码来执行。的实现代码来执行。分为静态联编方式和动态联编方式。分为静态联编方式和动态联编方式。类的类的封装封装、继承继承和和多态多态三种特性构成了面向对象程序设计三种特性构成了面向对象程序设计思想的基础。思想的基础。 窗口窗口窗口是指能进行图形处理的视觉上可见的程序窗口,包括可见窗口是指能进行图形处理的视觉上可见的程序窗口,包括可见不可见的消息处理能力。不可见的消息处理能力。消息消息消息是消息驱动机制的核心,通过结构消息是消息驱动机制的核心,通
11、过结构MSGMSG来描述:来描述:typedefstructtagMSGHWNDhwnd;/接收窗口的句柄接收窗口的句柄UINTmessage;/消息号消息号WPAPAMwParam;/消息参数消息参数LPAPAMlParam;/消息参数消息参数DWORDtime;/发送消息时间发送消息时间POINTpt;/光标位置光标位置MSG; 句柄句柄在在WindowsWindows环境中,句柄是用来标识项目的,这些项目包括:环境中,句柄是用来标识项目的,这些项目包括:模块模块(module)(module)任务任务(task)(task)实例实例(instance)(instance)文件文件(fil
12、e)(file)内存块内存块(block of memory)(block of memory)菜单菜单(menu)(menu)控制控制(control)(control)字体字体(font)(font)资源资源(resource)(resource)GDIGDI对象对象(GDI object)(GDI object)等等从数据类型上来看它只是一个从数据类型上来看它只是一个1616位的无符号整数。应用程序几位的无符号整数。应用程序几乎总是通过调用一个乎总是通过调用一个WINDOWS函数来获得一个句柄,之后通函数来获得一个句柄,之后通过其他的过其他的WINDOWS函数使用该句柄,以引用相应的对象
13、。函数使用该句柄,以引用相应的对象。 资源资源包括图标、位图、对话框、工具条和菜单等。资源集中在一个包括图标、位图、对话框、工具条和菜单等。资源集中在一个资源文件中定义,有特定的操作资源的函数(加载、使用、丢资源文件中定义,有特定的操作资源的函数(加载、使用、丢弃)。每个资源都有唯一的全局资源弃)。每个资源都有唯一的全局资源ID号。号。图形设备接口图形设备接口图形设备接口(图形设备接口(GDI GDI :Graphics Device InterfaceGraphics Device Interface),它的主),它的主要任务是负责系统与绘图程序之间的信息交换,处理要任务是负责系统与绘图程序
14、之间的信息交换,处理WindowsWindows程程序的图形输出。序的图形输出。图形设备接口(图形设备接口(GDIGDI)提供了一系列的函数和相关的结构,应用)提供了一系列的函数和相关的结构,应用程序可以使用它们在显示器、打印机或其他设备上生成图形化程序可以使用它们在显示器、打印机或其他设备上生成图形化的输出结果。的输出结果。 GDIGDI通过设备环境(通过设备环境(Device Context, DCDevice Context, DC),可以直接向指定的),可以直接向指定的设备进行输出。设备环境包含设备的信息。应用程序使用设备设备进行输出。设备环境包含设备的信息。应用程序使用设备环境函数来
15、创建环境函数来创建DCDC。GDIGDI将返回一个设备环境句柄,在随后的调将返回一个设备环境句柄,在随后的调用中,该句柄用于表示该设备。用中,该句柄用于表示该设备。 APIAPI函数函数API(Application Programming Interface,应用程序编程接口) 一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。windows APIwindows APIWindows API是一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows
16、函数.用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll.)。SDK(Software Developers Kit)编程直接调用API函数从最底层设计程序的Windows编程方式。#include stdafx.hBOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) MSG msg;/ 程序窗口初始化程序窗口初始化if (!InitInstance (hInstance, nCmdShow) return FALSE;/ 消息循环消息循环while (GetMessage(&msg, NULL, 0, 0) Translate