MFC非模态对话框与主对话框怎么传值

小羊同学 2012-06-28 04:44:22
模式对话框与主对话框是这样传值的:

CYourDlg dlg;

if(dlg.DoModal() == IDOK)
{
CString str = dlg.m_strData;//等之类的数据
}

非模式的怎么传值啊?


if (Dialog1->GetSafeHwnd() == NULL;)
Dialog1->Create(IDD_SETUPDLG,this);

Dialog1->ShowWindow(SW_SHOW);
...全文
505 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小羊同学 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 6 楼 的回复:
不行啊 在子对话框里
void CSetupDlg::OnBnClickedButton5()
{
CSetupDlg::OnOK();
CSerialPortDlg p;
p.datadlg1=m_Eno1;
p.datadlg2=m_Eon2;
p.datadlg3=m_Eon3;
p.datadlg1=p.datadlg1*100;
p.dat……
[/Quote]
是的 可以的、。。你好厉害啊 你怎么知道这样行的啊???崇拜啊!!!
酱油党 2012-06-29
  • 打赏
  • 举报
回复
直接 FileMapping
小羊同学 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 6 楼 的回复:
不行啊 在子对话框里
void CSetupDlg::OnBnClickedButton5()
{
CSetupDlg::OnOK();
CSerialPortDlg p;
p.datadlg1=m_Eno1;
p.datadlg2=m_Eon2;
p.datadlg3=m_Eon3;
p.datadlg1=p.datadlg1*100;
p.dat……
[/Quote]

嗯嗯 好的 我试试啊 太谢谢你咯。。。O(∩_∩)O~
suhuaiqiang_janlay 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
不行啊 在子对话框里
void CSetupDlg::OnBnClickedButton5()
{
CSetupDlg::OnOK();
CSerialPortDlg p;
p.datadlg1=m_Eno1;
p.datadlg2=m_Eon2;
p.datadlg3=m_Eon3;
p.datadlg1=p.datadlg1*100;
p.datad……
[/Quote]

不是这样子啊,你这样创建的CSerialPortDlg p是局部变量,已经不是你原来的父对话框了。

是给在CSetupDlg类添加一个指针成员变量(void *m_pMain),指向父对话框。以后可以调用该指针直接操作父对话框的内容。

例如:

在父对话框创建子对话框时:

CSetupDlg *pSetupDlg = new CSetupDlg;
pSetupDlg.m_pMain = (void *)this;

然后子对话框的OnBnClickedButton5()里面:

((CSerialPortDlg *)m_pMain)->str = m_strData;

而且你的 CSetupDlg::OnOK()语句应该是写在这个函数最后哦。。。
小羊同学 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

实在不行就使用消息,一边new,一边delete
[/Quote]
教教我 怎么一边new 一般delete。。。
dragronboy 2012-06-28
  • 打赏
  • 举报
回复
实在不行就使用消息,一边new,一边delete
小羊同学 2012-06-28
  • 打赏
  • 举报
回复
不行啊 在子对话框里
void CSetupDlg::OnBnClickedButton5()
{
CSetupDlg::OnOK();
CSerialPortDlg p;
p.datadlg1=m_Eno1;
p.datadlg2=m_Eon2;
p.datadlg3=m_Eon3;
p.datadlg1=p.datadlg1*100;
p.datadlg2=p.datadlg2*10;
p.datadlg3=p.datadlg3*1;


CSetupDlg::DestroyWindow();

}我是这样写的 P是指向主窗口的变量,datadlg是主窗口的成员变量,m_Eno1是子对话框的变量,我是这样传值的,但是不行啊 按了OK 没有反应
小羊同学 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 2 楼 的回复:
引用 1 楼 的回复:

CString str = Dialog1->m_strData;

这有什么不一样呢?只要知道Dialog1指针就能传值啊。。

你的意思是想要在对话框close的时候才把值传给主对话框还是怎样?

是要按下OK的时候 把EDIT控件里的值传给主对话框。。。。


就在子对话框的OnOk()函数里面把值传给主对话框就可……
[/Quote]
哦 ,我试试啊
suhuaiqiang_janlay 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:

CString str = Dialog1->m_strData;

这有什么不一样呢?只要知道Dialog1指针就能传值啊。。

你的意思是想要在对话框close的时候才把值传给主对话框还是怎样?

是要按下OK的时候 把EDIT控件里的值传给主对话框。。。。
[/Quote]

就在子对话框的OnOk()函数里面把值传给主对话框就可以了。。
suhuaiqiang_janlay 2012-06-28
  • 打赏
  • 举报
回复
或者一开始就把主对话框指针传给子对话框:

Dialog1->m_pMain = (void *)this;

以后要传值给主对话框,就在子对话框里面这么调:

((CMainDlg *)m_pMain)->str = m_strData;

小羊同学 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

CString str = Dialog1->m_strData;

这有什么不一样呢?只要知道Dialog1指针就能传值啊。。

你的意思是想要在对话框close的时候才把值传给主对话框还是怎样?
[/Quote]
是要按下OK的时候 把EDIT控件里的值传给主对话框。。。。
suhuaiqiang_janlay 2012-06-28
  • 打赏
  • 举报
回复
CString str = Dialog1->m_strData;

这有什么不一样呢?只要知道Dialog1指针就能传值啊。。

你的意思是想要在对话框close的时候才把值传给主对话框还是怎样?

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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