美文网首页MFC
MFC框架 和Windows的关系

MFC框架 和Windows的关系

作者: Python编程导师 | 来源:发表于2018-12-03 16:46 被阅读0次

MFC 和Windows的关系 <PS:有其他问题欢迎进群 941636044 交流探讨!>

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类等就是如此实现的,但是,应该看到:两者的销毁是不同的。

相关文章

  • MFC框架 和Windows的关系

    MFC 和Windows的关系 MFC中最重要的封装是对Win32 API的封装,因此,理解Windows Obj...

  • MFC 快速入门

    概述 MFC微软基础类库的作用在Windows平台做GUI开发使用 MFC框架设计思想 Windows消息机制 S...

  • 10月11日C++学习总结

    今天讲了MFC框架对于六个网络事件的处理 当上述的网络事件发生时,MFC框架作何处理呢?按照Windows的消息...

  • Windows程序多语言支持

    Windows程序多语言场景及其原理 因个人项目接触面的问题,目前仅在Windows桌面应用开发中,使用MFC框架...

  • 基于VC++的MFC类库实现的五子棋小游戏

    一、项目基本信息 操作系统:Windows 10 开发环境:VS2017 和 MFC 框架 项目基本信息:通过 V...

  • MFC_2常规 MFC 主题

    Microsoft 基础类库是用于在 Microsoft Windows 中编程的应用程序框架。 MFC 采用 C...

  • 9.25 c++ 总结

    Windows编程基础 总结: 25号开始学习Windows编程基础,MFC编程。Windows和MFS中的字符,...

  • QT事件循环

    Qt 事件和信号的关系 Qt的事件是windows的底层消息封装而成的。这个消息和MFC里的消息是同一概念,都是指...

  • JavaScript第八章 BOM

    Windows对象全局作用域全局作用域中声明的变量,函数和方法都会变成windows的属性和方法窗口关系及框架每个...

  • MFC编程第一天——Windows编程与MFC编程基础

    Windows编程与MFC编程基础 一、Windows编程 1、Windows应用程序编程接口API Window...

网友评论

    本文标题:MFC框架 和Windows的关系

    本文链接:https://www.haomeiwen.com/subject/fjzycqtx.html