您的位置 首页 元件

MFC和Win32技能使用剖析

MFC Object和Windows Object的关系MFC中最重要的封装是对Win32 API的封装,因此,理解Windows Object和MFC Object (C++对象,一个C++类的实

MFC Object和Windows Object的联系

MFC中最重要的封装是对Win32 API的封装,因而,了解Windows Object和MFC Object (C++目标,一个C++类的实例)之间的联系是了解MFC的要害之一。所谓Windows Object(Windows目标)是Win32下用句柄表明的Windows操作体系目标;所谓MFC Object (MFC目标)是C++目标,是一个C++类的实例,这儿(本书范围内)MFC Object是有特定意义的,指封装Windows Object的C++ Object,并非指恣意的C++ Object。

MFC Object 和Windows Object是不一样的,但两者紧密联系。以窗口目标为例:

一个MFC窗口目标是一个C++ CWnd类(或派生类)的实例,是程序直接创立的。在程序履行中它跟着窗口类结构函数的调用而生成,跟着析构函数的调用而消失。而Windows窗口则是Windows体系的一个内部数据结构的实例,由一个“窗口句柄”标识,Windows体系创立它并给它分配体系资源。Windows窗口在MFC窗口目标创立之后,由CWnd类的Create成员函数创立,“窗口句柄”保存在窗口目标的m_hWnd成员变量中。Windows窗口能够被一个程序毁掉,也能够被用户的动作毁掉。MFC窗口目标和Windows窗口目标的联系如图2-1所示。其他的Windows Object和对应的MFC Object也有相似的联系。

下面,对MFC Object和Windows Object作一个比较。有些结论对设备描绘表(MFC类是CDC,句柄是HDC)或许不适用,但详细涉及到时会指出。

从数据结构上比较

MFC Object是相应C++类的实例,这些类是MFC或许程序员界说的;

Windows Object是Windows体系的内部结构,经过一个句柄来引证;

MFC给这些类界说了一个成员变量来保存MFC Object对应的Windows Object的句柄。关于设备描绘表CDC类,将保存两个HDC句柄。

从层次上讲比较

MFC Object是高层的,Windows Object是低层的;

MFC Object封装了Windows Object的大部分或悉数功用,MFC Object的运用者不需要直接运用Windows Object的HANDLE(句柄)运用Win32 API,替代它的是引证相应的MFC Object的成员函数。

从创立上比较

MFC Object经过结构函数由程序直接创立;Windows Object由相应的SDK函数创立。

MFC中,运用这些MFC Object,一般分两步:

首要,创立一个MFC Object,或许在STACK中创立,或许在HEAP中创立,这时,MFC Object的句柄实例变量为空,或许说不是一个有用的句柄。

然后,调用MFC Object的成员函数创立相应的Windows Object,MFC的句柄变量存储一个有用句柄。

CDC(设备描绘表类)的创立有所不同,在后面的2.3节会详细阐明CDC及其派生类的创立和运用。

当然,能够在MFC Object的结构函数中创立相应的Windows目标,MFC的GDI类便是如此完结的,但从实质上讲,MFC Object的创立和Windows Object的创立是两回事。

从转换上比较

能够从一个MFC Object得到对应的Windows Object的句柄;一般运用MFC Object的成员函数GetSafeHandle得到对应的句柄。

能够从一个已存在的Windows Object创立一个对应的MFC Object; 一般运用MFC Object的成员函数Attach或许FromHandle来创立,前者得到一个永久性目标,后者得到的或许是一个暂时目标。

从运用范围上比较

MFC Object对体系的其他进程来说是不行见、不行用的;而Windows Object一旦创立,其句柄是整个Windows体系大局的。一些句柄能够被其他进程运用。典型地,一个进程能够获得另一进程的窗口句柄,并给该窗口发送音讯。

对同一个进程的线程来说,只能够运用本线程创立的MFC Object,不能运用其他线程的MFC Object。

从毁掉上比较

MFC Object跟着析构函数的调用而消失;但Windows Object有必要由相应的Windows体系函数毁掉。

设备描绘表CDC类的目标有所不同,它对应的HDC句柄目标或许不是被毁掉,而是被开释。

当然,能够在MFC Object的析构函数中完结Windows Object的毁掉,MFC Object的GDI类等便是如此完结的,可是,应该看到:两者的毁掉是不同的。

每类Windows Object都有对应的MFC Object,下面用表格的方式列出它们之间的对应联系,如表2-1所示:

表2-1 MFC Object和Windows Object的对应联系

表2-1中的OBJECT分以下几类:

描绘Windows句柄MFC Object

窗口HWNDCWnd and CWnd-derived classes

设备上下文HDCCDC and CDC-derived classes

菜单HMENUCMenu

笔HPENCGdiObject类,CPen和CPen-derived classes

刷子HBRUSHCGdiObject类,CBrush和CBrush-derived classes

字体HFONTCGdiObject类,CFont和CFont-derived classes

位图HBITMAPCGdiObject类,CBitmap和CBitmap-derived classes

调色板HPALETTECGdiObject类,CPalette和CPalette-derived classes

区域HRGNCGdiObject类,CRgn和CRgn-derived classes

图画列表HimageLISTCimageList和CimageList-derived classes

套接字SOCKETCSocket,CAsynSocket及其派生类

Windows目标,

设备上下文目标,

GDI目标(BITMAP,BRUSH,FONT,PALETTE,PEN,RGN),

菜单,

图画列表,

网络套接字接口。

从广义上来看,文档目标和文件能够看作一对MFC Object和Windows Object,分别用CDocument类和文件句柄描绘。

后续几节分别对前四类作一个短小精悍的论说。

Windows Object

用SDK的Win32 API编写各种Windows运用程序,有其一起的规则:首要是编写WinMain函数,编写处理音讯和事情的窗口进程WndProc,在WinMain里头注册窗口(Register Window),创立窗口,然后开端运用程序的音讯循环。

MFC运用程序也不破例,由于MFC是一个建立在SDK API基础上的编程结构。对程序员来说所不同的是:一般情况下,MFC结构主动完结了Windows挂号、创立等作业。

下面,扼要介绍MFC Window对Windows Window的封装。

Windows的注册

一个运用程序在创立某个类型的窗口前,有必要首要注册该“窗口类”(Windows Class)。留意,这儿不是C++类的类。Register Window把窗口进程、窗口类型以及其他类型信息和要挂号的窗口类相关起来。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/135602.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部