MFC教程(2)-- MFC和Win32
2010-03-25 20:33:55 来源:WEB开发网从使用范围上比较
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的对应关系
描述 |
Windows句柄 |
MFC Object |
窗口 |
HWND |
CWnd and CWnd-derived classes |
设备上下文 |
HDC |
CDC and CDC-derived classes |
菜单 |
HMENU |
CMenu |
笔 |
HPEN |
CGdiObject类,CPen和CPen-derived classes |
刷子 |
HBRUSH |
CGdiObject类,CBrush和CBrush-derived classes |
字体 |
HFONT |
CGdiObject类,CFont和CFont-derived classes |
位图 |
HBITMAP |
CGdiObject类,CBitmap和CBitmap-derived classes |
调色板 |
HPALETTE |
CGdiObject类,CPalette和CPalette-derived classes |
区域 |
HRGN |
CGdiObject类,CRgn和CRgn-derived classes |
图像列表 |
HimageLIST |
CimageList和CimageList-derived classes |
套接字 |
SOCKET |
CSocket,CAsynSocket及其派生类 |
表2-1中的OBJECT分以下几类:
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登记、创建等工作。
更多精彩
赞助商链接