MFC最重要的类

本文转贴于:http://blog.beaplat.com/257310/item/1579.html

 

MFC窗口类
1CObject类
CObject类为其派生类提供了支持序列化,调试信息期类型信息等一些通用功能.
2CCmdTarget类
凡是希望具有希望具有Windows消息的功能的都必须以CCmdTarget类为基类.
3CWnd类
凡是以窗口形式国外观并且可以响应消息的类(例如,按钮类Cbutton,滚动条类
CscrollBar等),它们的基类都是CWnd类
4CFrmaeWnd
它的派生类对象就是应用程序的主窗口.

CWinApp类
MFC把原来在CwinApp类中定义的CWnd*类型的数据成员m_pMainWnd(程序的主窗口)放在CWinThread中定义了,所以在CWinApp类声明中看不到这个对象.CWinApp类中还有3个可以虚成员函数:InitApplication,InitInstance和Run.

文档/视图结构及其框架类
文档/视图结构需要三个类对象
框架窗口类CFrameWnd对象,
视图类CView对象
文档类CDocument对象

框架窗口类CFrameWnd对象,作为窗口的框架, 视图类CView对象作为贴附在框架窗口上的用户区,二者共同形成了应用程序的界面,而文档类CDocument对象则在幕后专门对数据进行存储和管理.

文档类CDocument
应用程序的数据是由文档类CDocument对象来存储和管理的.
视图类CView
视图类CView有向个重要的成员函数.
(1)GetDocument函数
视图类对象通过GetDocument函数来访问文档类对象中的数据的.
(2)OnDraw函数
这个函数有一个指向CDC类的指针参数,通过它可能直接调用CDC类白话文学城视力上显示数据和图形.
在应用程序窗口出现在及大小发生变化时,系统将自动调用OnDraw函数
(3)OnInitialUpdate函数
它在应用程序启动或用户通过菜单新建,打开文档时被除数调用.因此用户可以在这个函数中作一些文档的初始化工作.

文档模板类CDocTemplate


应用程序类CWinApp
在应用程序类的InitInstance函数中,创建了一个单文档模板类或多文档模板类的对象,并且在文档模板的构造函数中,系统定义的宏RUNTIME_CLASS创建了文档类对象,框架窗口类对象和视图类对象.在一个应用程序中,可以使用多个模板,这些模板由系统创建的一个链表进行管理.因此,在创建了模板之后,还要使用函数AddDocTemplate把该模板添加到模板的链表中.例如
BOOL CKuanApp::InitInstance()
{
........................................

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME, //文档模板使用的资源ID
RUNTIME_CLASS(CKuanDoc), //创建文档对象
RUNTIME_CLASS(CMainFrame), //创建主SDI框架窗口
RUNTIME_CLASS(CKuanView)); //将文档板加入模板链表中
AddDocTemplate(pDocTemplate);

..................................
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();

return TRUE;
}

函数中带有注释的代码相当于早期的MFC程序的

MyWnd *pMainWnd=new MyWnd;
pMainWnd->CreateWin();

程序员的主要工作

(1) 重写XWinApp派生类的虚函数InitInstance.在这个函数中,按自己的需要创建和显示窗口.
(2) 在CDocument的派生类中,声明程序所埯的数据和对这些数据进行必要操作的接口函数.
(3) 在CViwe类的派生类中编写处理消息的代码.如果在消息处理中需要文档的数据,应该调用该类的成员函数GetDocument来获取文档对象,然后通过文档对象的接口函数对文档中的数据进行操作.
(4) 在CViwe类的派生类中的OnDraw函数中编写窗口重绘时的代码.



对象的动态创建
MF要求大势已去有可以动态创建对象的烦躁,要有一个叫做类信息表的成员.于是,MFC定义了一个名称为CRuntimeClass结构
struct CRuntimeClass
{
LPCATR m_lpszClassName; //类名称
................................ //创建类的对象所需的其他信息
CRuntimeClass * m_pBaseClass; //指向基类类信息表的指针
CRuntimeClass * m_pNextClass; //指向下一个表项的指针
};

与处理消息映射类类似,为了方便,MFC把在类中声明类信息表的代码封装在宏DECLARE_DYNCREATE中
而把实现类信息表和链表的代码填充装在了宏IMPLEMENT_DYNCREATE
class A: public B
{
public:
DECLARE_DYNCREATE(A)
................
};
IMPLEMENT_DYNCREATE(A,B)

在需要动态创建一个类的对象时,要根据类名到存放类信息的链表中去查找和悼念该类的信息.MFC又提供了一个宏:
RUNTIME_CLASS(类名)
这个宏可以按参数提供的类名,在类信息链表中悼念该类的相关信息并调用该类的构造函数来创建对象.如:
RUNTIME_CLASS(CKuanDoc), //创建文档对象
RUNTIME_CLASS(CMainFrame), //创建主SDI框架窗口
RUNTIME_CLASS(CKuanView)); //将文档板加入模板链表中.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值