首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MFC和Win32技术应用分析 02

MFC和Win32技术应用分析 02

 从转换上比较
  可以从一个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把窗口过程、窗口类型以及其他类型信息和要登记的窗口类关联起来。
  
返回列表