关于 mfc单文档中 类 控件 单文档 间的关系?

german010 2009-05-10 08:27:37
1) 在对话框下 添加 mfc自己有的控件,可以先 将控件 拖放到对话框上,然后建立一个 类与 控件对应,然后 通过类来 操作 该控件;
2) 在单文档下,添加 mfc自己有的控件,可以 使用new操作符来 动态 建立一个控件,
但我看 vcbasse里 一个 例子,不符合上述 两种情况,
链接如下 http://www.vckbase.com/document/viewdoc/?id=257
是自己实现了一个类CCoolBar,派生于CControlBar的 一种 控件,例子中 是 直接定义了一个 CCoolBar 的对象 m_wndMyBar1,然后 使用类内函数
if (!m_wndMyBar1.Create(_T("我的控制条"), this, CSize(230,260),TRUE,123))直接 创建了,
并不是使用 new 来创建了,
是不是 自己定义的 类 在 单文档和 对话框里 都是这种用法?
...全文
117 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hyq248021399 2009-05-11
差不多 但你对指针的理解有待加强
简单概括下 用new主要是为了动态和灵活
不用new相对呆板当然也安全一点
一切都看你的设计需要
回复
german010 2009-05-10
谢谢 hyq248021399的回答 ,
我还想 再问 几句,
是不是 单文档 动态创建 控件的 时候 之所以 需要 使用new操作符定义 一个与控件关联的类 的对象,是因为后面要 定义一个指针变量 指向 与那个控件关联的类的 对象;
而 一楼 所述例子中 之所以没有使用new操作符 定义 一个与控件关联的类 的对象, 而只定义 一个 类Mainframe 的内部 的类CCoolBar 的对象 m_wndMyBar1 就可以了, 是因为 后面不需要 定义一个 指针变量,来指向 m_wndMyBar1 量
回复
hyq248021399 2009-05-10
你这个问题其实就是new和构造器的问题

class A
{
public:
A();
~A();
private:
YourClass m_a;
YourClass* m_pa;
};

int main()
{
A a;
};


在A a的时候 会调用A的构造器
A的构造器隐式调用了YourClass的默认构造器去创建 m_a对象(分配栈内存)
当然 你也可以将m_pa指针去指向一个new出来的YourClass对象(分配堆内存)

回到你说的CBar问题 只有分配了内存的对象才能调用Create方法去创建窗体控件
回复
german010 2009-05-10
那为何 单文档下 动态 创建 一个 控件的时候,使用了new,
而这里 却 直接 定义了一个 主框架 类 内的 类CCoolBar类型 变量m_wndMyBar1,
而没有用 new呢?
new是分配了 一个 全局的地址,而这里 为何只获得 一个类内的 变量 就可以了呢?
回复
hyq248021399 2009-05-10
new只是动态创建对象 和create没有关系
create只是创建一个窗体(CWnd)实例 并且赋予其句柄等窗体必须信息 如果没有create是无法显示窗口控件的

在类中定义m_wndMyBar1 会在frame执行构造时也调用CControlBar的构造器 并且在栈中分配内存

所以new和create没有什么关系,建议可以先学习下api
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2009-05-10 08:27
社区公告
暂无公告