我编了一个主对话框,几个子对话框。子对话框要求能够点击主对话框按钮时能跳出来。现在我把子对话框的实例对象归为主对话框的保护成员时,程序编译通过,但是点击运行什么都不出来:
class CMainDlg // 主对话框
{
protected:
CSubDlg m_subDlg; // 子对话框类成员,这样设置程序编译通过 但不运行!
}
反过来,我不再把子对话框对象设为主对话框的成员,而是设置为全局的变量,程序就可以运行了。
CSubDlg m_subDlg; // 子对话框类成员设置为全局变量,程序可运行!
class CMainDlg // 主对话框
{
protected:
}
后面点击主对话框按钮,子对话框也跳出来,貌似一切正常也不影响。
这个是为什么? 我以前也有把子对话框对象设为主对话框类成员的用例啊,而且跑通了,为什么有时候就不行呢?
你自己也说了:以前也有把子对话框对象设为主对话框类成员的用例啊,而且跑通了。
其实造成这个现象,通常是两个方面的可能:
子对话框初始化失败。作为类成员后,由于编译优化,可能会对类成员的类的构造产生影响,导致一些自定义的初始化由于代码逻辑冲突无法完成。一般这个可能不是很大。
类堆栈限制。32位VC下的标准类,有64k的限制,包括类的所有自定义和派生的成员变量、函数,总大小不能超过64k,否则会失败。所以在对话框类中再声明对话框类是不可取的,容易产生溢出(这也是为什么在MFC框架下,工具条、菜单等不采用标准窗口类的原因)
那请问,如果超过了大小,就不得不采取将主对话框的成员类变成该文件的全局类吗?
追答很多办法啊。全局变量可以,临时变量也可以啊,或者通过指针也行。
最简单的,临时变量,哪里用到了,哪里再声明就可以了,只要在父对话框成员函数中,不影响父子关系。
MFC子对话框归为主对话框类成员的问题
其实造成这个现象,通常是两个方面的可能:子对话框初始化失败。作为类成员后,由于编译优化,可能会对类成员的类的构造产生影响,导致一些自定义的初始化由于代码逻辑冲突无法完成。一般这个可能不是很大。类堆栈限制。32位VC下的标准类,有64k的限制,包括类的所有自定义和派生的成员变量、函数,总大小不...
MFC中子对话框中的数据如何更新到母对话框中
嘿嘿,这个很简单,在主对话框的类的头文件里,让子对话框生成的类实例化一个对象,然后在主界面直接调用呗 ,比如主对话框的类是YouDlg,然后子对话框的类是CChild1生成了一个Child1.h和Child1.cpp文件,那就直接在YouDlg.h里面#include“Child1.h”然后在添加CChild1 child1;再假如子对话框的...
MFC中tab控件下子对话框切换问题
问题出在CDialog的缺省消息处理函数没有把切换按键的消息转发给父窗口,因此,在子对话框活动期间,实际上主窗口是得不到按键消息的。解决方案是你不要基于CDialog做tab的子窗口,应该使用面板类。如果你一定想用CDialog,那么你需要重载CDialog的键盘处理消息函数,让tab切换键的消息向父窗口转发由父窗口...
MFC如何在子对话框建立新变量,使得能在主对话框中调用
MFC中的对话框貌似只是个类吧,你把数组声明为公有成员,主对话框就直接使用该公有成员就行了。。。或者声明一个公有指针,把你申请的数组指针付给这个公有指针,或者你设置个共有成员函数,该函数返回该数组指针就行了。。。
MFC调出子对话框后如何操作主对话框(不关闭子对话框)
对话框有两种:1 模式对话框 2 非模式对话框 模式对话框弹出后,需关闭才能执行主窗体的程序 非模式对话框弹出后,可以一直保留在屏幕中,两窗体可交叉工作。弹出非模式对话框的方法 1 在头文件中加入 include "Dlg.h"public:CDlg *Dlg;2 在代码中加入 Dlg=new CDlg(this);Dlg->Create(IDD_...
MFC 由主对话框创建的子对话框始终显示在主对话框前面,而且最小化主...
可能是你创建子窗口的方法有问题吧。可以先添加一个对话框资源,然后创建一个该对话框资源的类,然后在主对话框类中添加这个子对话框类的一个变量,然后用 Create(), 和ShowWindow 两个函数配合做的窗口不会出现你这样的问题。现在你改的话很麻烦。可以找到主窗口最小化的消息响应函数在里头加补丁代码...
我想问下MFC在子窗口怎么能得到主窗口的信息呢?
最简单的,把主窗口的需要显示的东西放到Public区。在子窗口直接引用CAAADlg(名字你自己看)->属性。子窗口,主窗口的概念是你自己的,计算机没有这么多约束,编程有的只有public,private,protect。琢磨下:)
MFC非模态对话框与主对话框怎么传值
任何一个对话框都对应一个对话框类对象,只要获取相应对话框类对象或对象指针就可以通过相应对话框类对象或对象指针来操作其中的成员.
怎样在MFC中,把不同人编写的对话框整合到一起并且运行?
为了简单:最后每个人返回给你的是一个对话框类。其它功能类若干,但你的主程序只需要对话框类调用。作为分配任务的人,需要把对话框类的输入和输出接口设计好,告诉接受任务的人,写好后,供你的主程序调用。如果你主程序逻辑上不能等所有人都完成任务再综合,你可以自己创建对应的对话框类,输出输出...
MFC显示对话框后,如何实现点击对话框的确定按钮让编辑框中的内容显示...
建立一个对话框成员变量(public: CString m_str),在确定按钮响应函数OnOK里面,将三个编辑框的绑定变量(CString类型)赋值给m_str:m_str = m_edit1+" "+m_edit2+" "+m_edit3;在对话框模态调用(DoModal)处,通过一个主框架的类成员CString接收变量:m_showStr = dlg.m_str;这样数据...