MFC中类的作用由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“常用的mfc类及其作用”。
MFC中类的作用
(一)类的作用
面向对象的的程序设计体现在类对数据和操作的封装,但是这只是模板,要想真正去使用里面的数据和操作,必须实例化类的一个对象,这样类内部的成员才会真正存在,具有实际意义。MFC是微软的基础类库,这些类涉及了Windows应用程序的方方面面,我们可以通过调用类内部的成员函数或Win32的API函数来实现程序需要的操作。应用程序中所有的操作(包括产生窗口、对资源的操作控制、程序主要功能等)都被封装在类和API中。如要产生一个应用程序就需要调用应用程序类CWinApp的函数,首先需要实例化应用程序类的对象theApp,通过它来调用CWinApp的InitInstance函数完成应用程序从启动到窗口显示进入消息循环的所有操作。因为我们在编写应用程序时,向导已经将所有应用程序都具有的无需我们改变的结构、函数、类在程序底层做了定义和引用。而将我们在编写应用程序时需要改动或增加成员的类,显示在ClaView视图当中。有应用程序类CMyApp、主框架类CMainFrame、文档类CMyDocument和视类CMyView还有可能包括对话框类CMyDialog、属性表单类CMyPropertySheet等。我们所要完成的操作都能在这些类中完成。操作是通过函数实现的,而函数包含在类当中,因此要对某个资源或应用程序其他部分进行操作,在添加资源模板后要为它新建一个类通过隐含对象或this指针调用类中成员函数对资源进行操作,以实现我们想要的功能,我们常说为资源派生一个类。我们可以直接在资源上双击这些资源,在打开的新建类向导中为资源新建类,由于同一类资源应当具有某些相同的特征,应该可以实现某些相同的功能,微软就尽可能得将这些操作封装到MFC的基础类中,在新建类时我们根据资源类型选取合适基类,在该基类上派生出我们自己的类与资源相关联,派生类继承了基类的操作,并且可以在派生类中加入我们自己的操作,所以我们在类视图中看得到类都是派生类。如我们插入一对话框模板,为其从CDialog中派生一个CMydialog类与之关联,若要显示这个对话框,需要调用CMyDialog中的成员函数DoModal,调用成员就需通过对象或指针,而CMyDialog类在与对话框资源关联时对象是隐藏的、不可见的,若再类内部成员是可以直接调用的,类以及资源所对应的对象在类内部可以用this指针代表(传递DC的目的界面时常用CClientDC dc(this)),那其他类该如何调用CMyDialog中的成员呢?
Windows应用程序类,类所关联的对象和资源是分层的。层次性是由对象包含造成的,这也是各个类联系起来的关键。根据窗口的显示顺序或包含关系,在父窗口所关联的类当中实例化子窗口所关联类的对象,并在父窗口类中通过该对象调用DoModal显示子窗口,再在子窗口所关联的类当中,实例化更低一级的子窗口对象,这样就将各个类、窗口按层次高低组织起来了。父类中使子窗口显示后,我们可以在这些子类中添加窗口过程函数(包括消息响应函数),对子窗口进行操作。由于子窗口类的对象在父窗口中定义了,那么我们就可以在父窗口类中引用子窗口类中的成员,且可以一直引用下去直到最低级子窗口。这不就将类组织起来了吗。还有一种使类组织起来的方式,是通过全局函数,也就是Win32的API函数,这些函数由操作系统提供,存放在system32文件夹下的几个DLL文件中,他们可以再程序的任何地方被直接调用,如在View类中调用::AfxGetApp可获得指向应用程序对象theApp的指针,也起到了连接类的作用。
(二).对象、指向对象的指针、资源的句柄、资源ID之间的关系
对象是类的实例,指针指向对象,对象和指针都是为了使类具体化,然后通过它们访问类中的成员。类模板具有什么,它所实例化的对象就包含什么。资源在内存中要占据一定空间,为了管理和操作资源,每个资源(包括画刷、画笔、字体,对话框、控件等)甚至整个应用程序都有一个标识,来区分和寻找它们,这个标识被称为句柄。句柄就像资源的把手,我们可以握住它来操纵资源。ID号是只有像位图、对话框、控件等纯资源才具有的标识,它们与句柄相似但我们不能拿他去操纵资源,只是给不同的资源取的不同的名字罢了。不过一般情况下也可认为ID和句柄是同一类事物。
我们已经知道,对资源的操作要通过对象调用内部函数完成,那对象和句柄是什么关系呢?与资源相关联的类中有通常有一个句柄成员变量,将资源和类取得关联其实就是将资源的句柄赋给该句柄成员变量,以后该类所有实例化的对象自然握有该句柄,对象调用函数通过握有的资源的句柄对对应资源进行操作。所以对象包含句柄。一个句柄代表一个资源,通过对象调用DoModal显示窗口,窗口关闭后虽然窗口被销毁了,但是操纵它的对象并没有销毁,只是该对象失去了资源的句柄断开了与资源的联系。所以窗口不等于对象。
在程序中,不同的函数对资源进行操纵需要的参数不同,一般是ID、句柄、指针。我们已经知道它们是包含关系,所以可由其中一个知道其他两个。
由ID得句柄: hWnd = ::GetDlgItem(hParentWnd,id);
由ID得指针: CWnd::GetDlgItem();
由句柄得ID:GetWindowLong(hWnd,GWL_ID);
由句柄得指针: CWnd *pWnd=CWnd::FromHandle(hWnd);
由指针得ID:id = GetWindowLong(pWnd->GetSafeHwnd,GWL_ID);GetDlgCtrlID();由指针得句柄,只需要直接引用其句柄成员就可以了。
MFCMFC,微软基础类(Microsoft Foundation Claes),同VCL类似,是一种Application Framework,随微软Visual C++ 开发工具发布。目前最新版本为8.0(截止2007年初)。该类库提供一组通......
在VC的编程中,常常遇到需要对字符串进行格式化处理,所谓的格式化,我自己的定义是如下的过程,例如说,需要输出一个字符串“This is charpter %d”,其中的%d,用变量int chp来代替,生成......
什么是MFC来源:KeyLife富翁笔记 时间: 2005-11-30 16:34:00浏览: 2192 次 评论: 9 篇MFC,微软基础类(Microsoft Foundation Claes),实际上是微软提供的,用于在C++环境下编写......
(一)简单的图形输出1、点: pDC->SetPixel(Cpoint(200,200),RGB(255,0,0,)); // 在 [200 , 200] 的位置画一个红点2、线: pDC->MoveTo(0,0); // 直线起点的坐标为( 0 , 0 )pDC->LineT......
MFC,微软基础类(Microsoft Foundation Claes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是Windows下开发人员使用的专业C++ SDK(SDK, Standard......