您的位置:首页 > 编程语言 > C语言/C++

Visual C++6.0 程序设计从入门到精通(四) - MFC类对象和资源之间的关系

2015-12-22 16:35 363 查看

1. MFC类对象和资源的介绍

MFC类对象指的是MFC中各种基类的对象,如
CWnd
CToolBar
等;而资源指的是用户在客户端所看到的各种窗口界面,包括窗口,各种控件,文档等。

2. MFC和资源之间的关系

通常,程序不能直接操作用户所能看到的各种窗口、空间等资源,因此,为了达到可以控制资源的目的, MFC为资源建立了相关的类,并且要求用户在创建MFC类对象时,将具体的资源绑定到该资源对应的类对象中,这样用户想对资源进行操作时,只需通过操作类对象的成员函数API即可实现具体的目的。

另外,程序中的资源文件含有一般MFC应用程序的默认菜单定义和加速键表、字符串表,还指定了默认的
About
对话框和一个图标文件(
res\HelloMFC.ico
)。

3. 为资源和类对象建立关系

要实现类对象和资源之间的关系,一般有两步:

1)建立MFC类对象

new
运算符创建一个C++对象,此时仅仅是创建了一个对象,但该对象对应的资源并未建立与绑定

注意:

第一:此处,用
new
的原因是一些对象是在函数体中创建的,具有函数体时间的声明周期,但函数体执行完成后,资源是会继续显示在界面中的,此时应该保证该资源对应的对象继续存在,因此使用
new
在动态内存区保存对象,该对象的生命周期是和应用程序的生命周期一样长的
。用户可以在类的析构函数中,动态的
delete
类对象,来实现内存的回收。

第二:在类的函数体中建立的对象的指针应该是该类的成员变量或者是一个全局变量,因为,如果用一个局部变量来保存动态分配返回的对象指针,那么当函数体执行完成之后,用户便无法访问该对象的内存地址,会导致内存泄露。

示例:

//第一步:创建一个 C++对象,其中 CMainFrame 是从 CFrameWnd 派生的对象
CMainFrame* pMyFrame=new CMainFrame();//用 new 操作符创建窗口对象


2)建立资源窗口并与对应的类对象绑定

使用MFC类中的
Create()
成员函数建立对应的界面资源(窗口、控件等),此时,界面的资源句柄会被保存到类的成员变量
m_Hwnd
中,两者之间的关系便能够建立。建立完成之后,用户便可以通过
类对象->hWnd
来访问界面资源。

示例:

//第二步:
pMyFrame->Create(NULL,“My Frame Window”);
//或者
m_wndToolBar.GetItemRect(1,&rect);
edit.Create(WS_CHILD|WS_VISIBLE,rect,&m_wndToolBar,ID_EDIT); //建立一个工具条


注意:

① 界面资源与类对象之间的对应关系是通过资源句柄
hWnd
完成的,即
hWnd
是类对象和界面之间连接的纽带;

每一个界面资源在程序中均有一个资源宏来唯一的描述界面,宏不能重复,因此,也可以用资源id来找到界面,例如: 控件的查找一般是通过资源ID来进行的,消息映射也是通过ID进行的;窗口的查找一般是通过
hWnd
进行的(所有继承于
Cwnd
的类都继承了共有成员
Hwnd
); 菜单、工具条可以通过
hwnd
也可以通过ID,在具体类中重新定义的类成员,一般是通过自身的成员变量查找的。

不同的对象查找方法也不同。但是,主要的还是用资源句柄
Hwnd
和资源ID(资源宏)进行


③ 窗口类对象的函数中,构造函数用于创建类对象,此外还有一类初始化函数(包括
create()
等),用于创建窗口资源并将界面句柄放置到
hWnd
中供以后使用


4. 总结

用户所熟知的窗口是资源句柄。 程序猿建立的是类对象,因此,建立两者之间的关系,需要在创建类对象之后,将窗口资源的句柄绑定到该对象上,以实现数据对象和视图对象的一一对应
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: