MFC子对话框归为主对话框类成员的问题

我编了一个主对话框,几个子对话框。子对话框要求能够点击主对话框按钮时能跳出来。现在我把子对话框的实例对象归为主对话框的保护成员时,程序编译通过,但是点击运行什么都不出来:... 我编了一个主对话框,几个子对话框。子对话框要求能够点击主对话框按钮时能跳出来。现在我把子对话框的实例对象归为主对话框的保护成员时,程序编译通过,但是点击运行什么都不出来:
class CMainDlg // 主对话框
{
protected:
CSubDlg m_subDlg; // 子对话框类成员,这样设置程序编译通过 但不运行!
}

反过来,我不再把子对话框对象设为主对话框的成员,而是设置为全局的变量,程序就可以运行了。

CSubDlg m_subDlg; // 子对话框类成员设置为全局变量,程序可运行!
class CMainDlg // 主对话框
{
protected:

}
后面点击主对话框按钮,子对话框也跳出来,貌似一切正常也不影响。
这个是为什么? 我以前也有把子对话框对象设为主对话框类成员的用例啊,而且跑通了,为什么有时候就不行呢?
展开
 我来答
bhtzu
2013-03-07 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4134万
展开全部

你自己也说了:以前也有把子对话框对象设为主对话框类成员的用例啊,而且跑通了。

其实造成这个现象,通常是两个方面的可能:

  1. 子对话框初始化失败。作为类成员后,由于编译优化,可能会对类成员的类的构造产生影响,导致一些自定义的初始化由于代码逻辑冲突无法完成。一般这个可能不是很大。

  2. 类堆栈限制。32位VC下的标准类,有64k的限制,包括类的所有自定义和派生的成员变量、函数,总大小不能超过64k,否则会失败。所以在对话框类中再声明对话框类是不可取的,容易产生溢出(这也是为什么在MFC框架下,工具条、菜单等不采用标准窗口类的原因)

追问
那请问,如果超过了大小,就不得不采取将主对话框的成员类变成该文件的全局类吗?
追答
很多办法啊。全局变量可以,临时变量也可以啊,或者通过指针也行。
最简单的,临时变量,哪里用到了,哪里再声明就可以了,只要在父对话框成员函数中,不影响父子关系。
zouyibbo
2013-03-07 · 超过15用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:51.4万
展开全部
了对话框类对像做为主对话框类的成员变量是可以的,也是可以打开子对话框 的,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式