对话框之间的数据传递

deilangel1203 2006-02-21 01:09:43
有一主对话框CSoftDlg,有一子对话框CDlgEdit(非模式)
点击主对话框But1按钮控件显示对话框CDlgEdit
void CSofDlg::Bou1()
{
CDlgEdit *dlgEdit;
if(dlgEdit==NULL)
{
dlgEdit=new CDlgEdit;
dlgEdit->Create(IDD_DLGEDIT,NULL);
dlgEdit->ShowWindow(SW_SHOW);
}
我想在But1中加入一个判断子对话框CDlgEdit是否关闭的语句,不知道该怎么加?
我的想法是在CDlgEdit中重载OnCancel(),然后在OnCancel()中修改But1事件处理程中的dlgEdit为NULL
void CDlgEdit::OnCancel()
{
//这里要怎么写啊?
}
...全文
197 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Featured 2006-02-22
  • 打赏
  • 举报
回复

应楼上所说,我认为如果是新手,可以定义一个成员变量是另外一个窗口的句柄(或者CWnd*类型)然后用。

另外如果是高手可以考虑其他的方法,类似多线成的方法,什么共享内存,管道等等(不好意思就是说说,在下不会,听说而已)

如果实在不考虑效率什么的,你可以写到文件里面,然后读文件(ft昏招自己都鄙视)
========
这哥们虽然有点@%$#%^_^但是确是够热心,挺有意思
Jarrylogin 2006-02-22
  • 打赏
  • 举报
回复
服了,既然不善用Windows消息机制,那就老老事实用全局变量吧。快又好!
fifaboy00 2006-02-21
  • 打赏
  • 举报
回复
应楼上所说,我认为如果是新手,可以定义一个成员变量是另外一个窗口的句柄(或者CWnd*类型)然后用。

另外如果是高手可以考虑其他的方法,类似多线成的方法,什么共享内存,管道等等(不好意思就是说说,在下不会,听说而已)

如果实在不考虑效率什么的,你可以写到文件里面,然后读文件(ft昏招自己都鄙视)

YufengShi 2006-02-21
  • 打赏
  • 举报
回复
To LongLongAgoImBoy(ThereIsAMe)
将父窗口的窗口句柄m_hWnd传递给子窗口
------------------------------------
既然是父子窗口,子窗口给父窗口发送消息,用GetParent()->PostMessage就可以了.
不必再在子窗口中保存父窗口的句柄.
deilangel1203 2006-02-21
  • 打赏
  • 举报
回复
看样子我要去买一本讲MFC消息机制的书了,完全不明白,有没有什么好的书介绍一下啊大哥们
kugou123 2006-02-21
  • 打赏
  • 举报
回复
发送自定义消息就可以了

然后添加消息映射

ON_MESSAGE(WM_MYMESS,OnMyWindowClose)

……
……
deilangel1203 2006-02-21
  • 打赏
  • 举报
回复
Microsoft Visual Studio .NET 2003里怎么加呢?我找不到哪里加WindowProc消息
deilangel1203 2006-02-21
  • 打赏
  • 举报
回复
哦,解决了
再改一次就OK
deilangel1203 2006-02-21
  • 打赏
  • 举报
回复
那我再点一下这个按钮,这个对话框那不是,不会显示了啊
Jimmy_Xia 2006-02-21
  • 打赏
  • 举报
回复
利用消息传递
在父窗口中添加WindowProc消息(在类向导中有这个的,这是对话框的消息处理函数,所有的消息都会调用它),
#define CHILD_DLG_CLOESED (WM_USER+1000)/*这是一个消息定义,*/
LRESULT CDialogtestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(message==CHILD_DLG_CLOSED)
AfxMessageBox("子窗口关闭了");
return CDialog::WindowProc(message, wParam, lParam);
}
将父窗口的窗口句柄m_hWnd传递给子窗口
CDlgEdit *dlgEdit;
if(dlgEdit==NULL)
{
dlgEdit=new CDlgEdit;
//传递句柄
dlgEdit->m_hWndParent = this->m_hWnd;
dlgEdit->Create(IDD_DLGEDIT,NULL);
dlgEdit->ShowWindow(SW_SHOW);
}
void CDlgEdit::OnCancel()
{
//这里这么写
::SendMessage(m_hWndParent,CHILD_DLG_CLOSED,0,0);
}
good luck
Jarrylogin 2006-02-21
  • 打赏
  • 举报
回复
定一个全局变量 int guan;
void CDlgEdit::OnCancel()
{
guan=0;
CDialog::OnCancel();
}

判断 if (guan==0){
}
deilangel1203 2006-02-21
  • 打赏
  • 举报
回复
在线等哦,兄弟们帮帮忙嘛

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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