MFC子对话框归为主对话框类成员的问题
我编了一个主对话框,几个子对话框。子对话框要求能够点击主对话框按钮时能跳出来。现在我把子对话框的实例对象归为主对话框的保护成员时,程序编译通过,但是点击运行什么都不出来:...
我编了一个主对话框,几个子对话框。子对话框要求能够点击主对话框按钮时能跳出来。现在我把子对话框的实例对象归为主对话框的保护成员时,程序编译通过,但是点击运行什么都不出来:
class CMainDlg // 主对话框
{
protected:
CSubDlg m_subDlg; // 子对话框类成员,这样设置程序编译通过 但不运行!
}
反过来,我不再把子对话框对象设为主对话框的成员,而是设置为全局的变量,程序就可以运行了。
CSubDlg m_subDlg; // 子对话框类成员设置为全局变量,程序可运行!
class CMainDlg // 主对话框
{
protected:
}
后面点击主对话框按钮,子对话框也跳出来,貌似一切正常也不影响。
这个是为什么? 我以前也有把子对话框对象设为主对话框类成员的用例啊,而且跑通了,为什么有时候就不行呢? 展开
class CMainDlg // 主对话框
{
protected:
CSubDlg m_subDlg; // 子对话框类成员,这样设置程序编译通过 但不运行!
}
反过来,我不再把子对话框对象设为主对话框的成员,而是设置为全局的变量,程序就可以运行了。
CSubDlg m_subDlg; // 子对话框类成员设置为全局变量,程序可运行!
class CMainDlg // 主对话框
{
protected:
}
后面点击主对话框按钮,子对话框也跳出来,貌似一切正常也不影响。
这个是为什么? 我以前也有把子对话框对象设为主对话框类成员的用例啊,而且跑通了,为什么有时候就不行呢? 展开
2个回答
展开全部
你自己也说了:以前也有把子对话框对象设为主对话框类成员的用例啊,而且跑通了。
其实造成这个现象,通常是两个方面的可能:
子对话框初始化失败。作为类成员后,由于编译优化,可能会对类成员的类的构造产生影响,导致一些自定义的初始化由于代码逻辑冲突无法完成。一般这个可能不是很大。
类堆栈限制。32位VC下的标准类,有64k的限制,包括类的所有自定义和派生的成员变量、函数,总大小不能超过64k,否则会失败。所以在对话框类中再声明对话框类是不可取的,容易产生溢出(这也是为什么在MFC框架下,工具条、菜单等不采用标准窗口类的原因)
追问
那请问,如果超过了大小,就不得不采取将主对话框的成员类变成该文件的全局类吗?
追答
很多办法啊。全局变量可以,临时变量也可以啊,或者通过指针也行。
最简单的,临时变量,哪里用到了,哪里再声明就可以了,只要在父对话框成员函数中,不影响父子关系。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询