怎么样在两个类之间通信?

gison 2004-12-07 07:03:29
子对话框要访问父对话框的信息怎么样实现比较好呢?
我想通过类中的公有变量来实现,但却不行:
class CTimeSetDlg : public CDialog
{
.....
Public CString str; //定义公有变量
.....
}

void CTimeSetDlg::OnOK()
{
GetDlgItemText(ID_EDIT1,str);
}

然后在子对话框中
void CClildDlg::OnButton1()
{
CTimeSetDlg dlg;
MessageBox(dlg.str);
}

先点父窗口的OK按钮,然后点button1按钮 却总是显示出空字符,显示不出str的值。还请大虾帮助指导一下。先谢谢了。
...全文
224 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
_xiao 2004-12-07
/////////////////////////////////////////////
然后在子对话框中
void CClildDlg::OnButton1()
{
CTimeSetDlg dlg;
MessageBox(dlg.str); //这里的dlg是你上句刚建立的对象,并不是当前子对话框的父对话框,其str自然是空的了
}
////////////////////////////////////////////
换成:
CTimeSetDlg *dlg = (CTimeSetDlg *)GetParentOwner();
MessageBox(dlg->str);
回复
handwolf 2004-12-07
我只是告诉你怎么用,不能把这个代码拷贝过去的,对话框当然还是你建了,但是两个对话框之间的联系用我给你思想。
明白了吗?


CParentDlg:public CDialog
{
//...
public:
CString str;
//...
};

子对话框类:
CClildDlg:public CDialog
{
//...
public:
CParentDlg * pParent;//point to the parent dialog
//...
afx_msg void OnButton1();
//...
};

//帮定消息



void CClildDlg::OnButton1()
{
MessageBox(pParent->str);
}


父对话框中有一个按纽,按下后,显示子对话框!代码如下

void CParentDlg ::OnButtonShowChildDlg()
{
CClildDlg dlg;
dlg.pParent = this;
dlg.Domodal();
}
回复
gison 2004-12-07
handwolf(初学者) 我按你写的出现了错误:

--------------------Configuration: parent - Win32 Debug--------------------
Compiling...
parentDlg.cpp
Childlg.cpp
d:\software\study\parent\childlg.h(19) : error C2143: syntax error : missing ';' before '*' 19行是 这句 CParentDlg * pParent;
d:\software\study\parent\childlg.h(19) : error C2501: 'CParentDlg' : missing storage-class or type specifiers
d:\software\study\parent\childlg.h(19) : error C2501: 'pParent' : missing storage-class or type specifiers
D:\software\study\parent\Childlg.cpp(48) : error C2065: 'pParent' : undeclared identifier
D:\software\study\parent\Childlg.cpp(48) : error C2227: left of '->str' must point to class/struct/union
Generating Code...
Error executing cl.exe.

parent.exe - 5 error(s), 0 warning(s)
回复
handwolf 2004-12-07
void CParentDlg ::OnButtonShowChildDlg()
{
CClildDlg dlg;
dlg.pParent = this;//把父对话框的句柄传给子对话框!
dlg.Domodal();
}

回复
EnochShen 2004-12-07

CTimeSetDlg dlg;
MessageBox(dlg.str);
这样不行,CTimeSetDlg dlg;DLG只是个空值。
回复
handwolf 2004-12-07
子对话框在父对话框中显示的时候,要把父对话框的句柄传给子对话框!
我给你举个例子:
父对话框类:
CParentDlg:public CDialog
{
//...
public:
CString str;
//...
}

子对话框类:
CClildDlg:public CDialog
{
//...
public:
CParentDlg * pParent;//point to the parent dialog
//...
afx_msg void OnButton1();
//...
}

//帮定消息



void CClildDlg::OnButton1()
{
MessageBox(pParent->str);
}


父对话框中有一个按纽,按下后,显示子对话框!代码如下

void CParentDlg ::OnButtonShowChildDlg()
{
CClildDlg dlg;
dlg.pParent = this;
dlg.Domodal();
}

回复
gison 2004-12-07
str的值是通过EDIT BOX动态输入的。
回复
KOBEBRYANT8 2004-12-07
str的值到底赋了没有啊?
构造函数CimeSetDlg()中
str = _T("");
改为:
str = _T("hh");//赋初值

回复
gison 2004-12-07
handwolf(初学者) 可以说下应该怎么写么?最后给个例子啊
回复
gison 2004-12-07
楼上的定制消息 可以说详细点么
回复
handwolf 2004-12-07
void CClildDlg::OnButton1()
{
CTimeSetDlg dlg;
MessageBox(dlg.str);
}
???????????????????????????????????????????????????

我想,你是因为最基本的知识没有弄清楚,怎么可以这么写呢?
回复
sunqinghui 2004-12-07
定制消息 通过定制的消息来进行
回复
gison 2004-12-07
debug 后,str的值与在edit中输入的值是一致的,但是一到CClildDlg中再调试的话,str的值就是空了。找不出原因来。
回复
scmsir 2004-12-07
建议楼主debug一下。
看看
void CTimeSetDlg::OnOK()
{
GetDlgItemText(ID_EDIT1,str);
}
执行之后str的值是多少。
回复
EnochShen 2004-12-07
用全局变量好了
回复
相关推荐
基于java的企业人事管理系统设计--软件工程课程设计(含源码与论文设计).rar 1 引言 4 1.1 课程设计目标 4 1.2 编程工具(编程环境)介绍 4 1.3 实施时间及主要实施步骤 4 2 需求分析 5 3 系统总体设计 6 4 数据库设计 6 5 主要功能模块的设计与实现 10 5.1 功能模块1详细设计(综合查询员工信息)..........................................................10 5.1.1 详细设计.......................................................................................................10 5.1.2 算法流程........................................................................................................15 5.1.3 界面设计及测试结果.....................................................................................15 6 调试分析 15 7 用户手册 16 8 测试结果 17 8.1 员工信息的添加...................................................................................................17 8.2 员工信息的修改...................................................................................................17 8.3 员工信息的删除...................................................................................................18 8.4 员工信息的综合查询...........................................................................................18 8.5 员工信息按性别统计的结果................................................................................19 8.6 员工信息按状态统计的结果...............................................................................19 8.7 员工信息按职称统计的结果................................................................................20 9 结论 20 10 参考文献 20
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-12-07 07:03
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……