对话框调用问题,急! 一定给分!

zhyuanbaron 2005-12-29 06:52:57
我定义了两个对话框,一是主对话框(自己生成的,为TestDialog),另一个是InsertDialog
我在TestDialogDlg.h中做如下定义:

#include "insertDialog.h"
class CTestDialogDlg : public CDialog
{
....
public:
CInsertDialog insertDlg;
}
然后在TestDialogDlg.cpp中的按钮响应函数中添加:

insertDlg->Create(IDD_DIALOG_INSERT);
insertDlg->ShowWindow(SW_SHOW);

但是运行的时候就弹出错误,如果把 InsertDialog insertDlg; 到类外面去定义(还在TestDialogDlg.h中)好了
...全文
202 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyuanbaron 2005-12-31
  • 打赏
  • 举报
回复
呵呵 问题解决了,重新编译一下就好了,谢谢大家的帮助,这就结贴
zhanghongbo1126 2005-12-31
  • 打赏
  • 举报
回复

不用贴代码!!!
我刚刚试的没有错误呀!!你是不是按一下按钮显示另一个对话框呀!!我刚刚就是这样测试的;没有错误。
class CA():public CDlog
{
Public:
CB b;
}
CA::OnButton()
{
b.Create(IDD_DLOG1);
b.ShowWindow(SW_SHOW);
}
///////////////////////////
class CB():public
{
}
//////////////////////////////////////////////
好用呀! 我只要点击CA上的按钮,就会显示CB的对话框;

是不是我没有理解你的意思呀!!要不你在说清楚一点。
wangxin_ch 2005-12-30
  • 打赏
  • 举报
回复
是不是在类CA初始化时CB就已经初始化了,即已经占用了一部分内存, 所以不可以初始化了
而作为全局变量就设关系!
zhyuanbaron 2005-12-30
  • 打赏
  • 举报
回复
是这样的
Class CA()
{
CB b; // 这样是可以的
}
Class CB()
{
}
但就是有错误,需要把代码贴出来吗?怕贴上有点乱,就没贴,呵呵
zhanghongbo1126 2005-12-30
  • 打赏
  • 举报
回复
是不是这样,你的两个类似这样的:互相包含
class CTestDialogDlg : public CDialog
{
....
public:
CInsertDialog insertDlg; // 定义了CInsertDialog对象 互相包含
}
同时在你的
class CInsertDialog: public CDialog
{
....
public:
CTestDialogDlg insertDlg; // 定义了CTestDialogDlg 对象 互相包含
}

这样的话你两个类的对象就互相包含了,使其无法确定大小,形成了死递归,但定义成指针,就能确定大小,因为指针可能就占4个字节的空间。
如果只包含一个是可以的,不知道你是不是这样的毛病;
Class CA()
{
CB b; // 这样是可以的
}
Class CB()
{
}

或者向你说的,如果互相调用,那可能只能用指针了;

969209pxb 2005-12-30
  • 打赏
  • 举报
回复
先谢谢大家,我试过换成指针,其他地方都不动,好用
但是为什么不用指针就不好使拉?

把 CInsertDialog insertDlg; 放到外面就好使,咋回事阿
--------------------------------------------------------
同问?
Stefine 2005-12-29
  • 打赏
  • 举报
回复
呵呵,创建非模式的,这样应该是可以的啦

像DOMODAL一样,放在CPP响应函数里头,然后只是把DOMODAL换成Create ShowWindow罢了
laofang 2005-12-29
  • 打赏
  • 举报
回复
无模式对话框基础,看看书就行
zhyuanbaron 2005-12-29
  • 打赏
  • 举报
回复
to: forover(天下无吥散dě宴席)
代码我发过去了,谢谢了
zhyuanbaron 2005-12-29
  • 打赏
  • 举报
回复
不好意思,写错了,是

insertDlg.Create(IDD_DIALOG_INSERT);
insertDlg.ShowWindow(SW_SHOW);
kugou123 2005-12-29
  • 打赏
  • 举报
回复
你定义的对象,不能用指针操作符的。
zhyuanbaron 2005-12-29
  • 打赏
  • 举报
回复
毛毛说得那个问题确实存在,呵呵,我原来打算设置bool变量的,这个简单多了,谢谢了

原问题还是不懂
forover 2005-12-29
  • 打赏
  • 举报
回复
光按你上面描述的话是不会有问题的,可能是你代码其他地方的问题,不介意的话把代码发给我帮你看看zhangyxlove(邮箱符号)163.com
zhyuanbaron 2005-12-29
  • 打赏
  • 举报
回复
先谢谢大家,我试过换成指针,其他地方都不动,好用
但是为什么不用指针就不好使拉?

把 CInsertDialog insertDlg; 放到外面就好使,咋回事阿
zhyuanbaron 2005-12-29
  • 打赏
  • 举报
回复
不好意思,写错了,是

insertDlg.Create(IDD_DIALOG_INSERT);
insertDlg.ShowWindow(SW_SHOW);
tianpuf 2005-12-29
  • 打赏
  • 举报
回复
insertDlg.Create(IDD_DIALOG_INSERT,this);这个this不是必要的吧。
我试了一下,没问题呀。
你要不把 CInsertDialog* insertDlg
insertDlg->Create(IDD_DIALOG_INSERT);
insertDlg->ShowWindow(SW_SHOW);
放在一块。
对了是不是你没有new CInsertDialog
应该是
CInsertDialog* insertDlg//放哪里都行
insertdlg=new Cinsertdialog
insertDlg->Create(IDD_DIALOG_INSERT);
insertDlg->ShowWindow(SW_SHOW);

handsomerun 2005-12-29
  • 打赏
  • 举报
回复
insertDlg.Create(IDD_DIALOG_INSERT,this);
insertDlg.ShowWindow(SW_SHOW);

不过注意阿,你如果这样的话,
点了一次这个按钮
下次再点的话
那个insertDlg对象还在,没有被清空,再create的话,就不对了
你可以先判断一下

if(insertDlg.GetSafeHwnd())
{
//已经被创建了,就不用再创建了
insertDlg.ShowWindow(SW_SHOW);

}
else
{
insertDlg.Create(IDD_DIALOG_INSERT,this);
insertDlg.ShowWindow(SW_SHOW);

}
Kudeet 2005-12-29
  • 打赏
  • 举报
回复
我一般的做法:
class CTestDialogDlg : public CDialog
{
....
public:
CInsertDialog *insertDlg;
}
然后在TestDialogDlg.cpp中的按钮响应函数中添加:

insertDlg=new CInsertDialog;
insertDlg->Create(IDD_DIALOG_INSERT,this);//parent window
insertDlg->ShowWindow(SW_SHOW);
newzk 2005-12-29
  • 打赏
  • 举报
回复
不应该是指针吧,楼主写得不够仔细
zhyuanbaron 2005-12-29
  • 打赏
  • 举报
回复
请问这是怎么回事啊?

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧