📄 subject_28642.htm
字号:
<p>
序号:28642 发表者:lijing2001 发表日期:2003-01-22 23:16:50
<br>主题:对话框!
<br>内容:我的程序是用对话框作主界面,里面有多个对话框,我想在子对话框中访问主对话框中变量,该变量可以因用户操作而改变,该怎么做?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-22 23:24:52
<br>内容:在每个子对话框中,定义主对话框的指针型变量 YourDlg * pDlg,在主对话框调用子对话框时,先对子对话框中的指针变量赋值<BR><BR>childDlg.pDlg=this;<BR>childDlg.DoModal();<BR>这样在子对话框中可以使用 pDlg->主对话框中的变量
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lijing2001 回复日期:2003-01-22 23:57:16
<br>内容:你帮我看看!拜托!<BR>在CMy01Dlg.cpp的函数中:<BR>void CMy01Dlg::OnModify() <BR>{<BR> CReQDlg pdlg=this;<BR> if(pdlg.DoModal()!=IDOK)<BR> return;<BR> MessageBox(pdlg.m_DqName);<BR>}<BR>在CReQDlg.cpp(字对话框)的函数中:<BR>BOOL CReQDlg::OnInitDialog() <BR>{ <BR> CMy01Dlg* pdlg=new CMy01Dlg; <BR> MessageBox(pdlg->m_DqNuB[1]);<BR> CDialog::OnInitDialog();<BR> return TRUE; <BR>}<BR>pdlg->m_DqNuB[1]变量在主对话框的函数中变化,这样写不行吧?<BR>pdlg->m_DqNuB[1]测试出等于空!能帮我改改吗?<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:upstream 回复日期:2003-01-23 09:12:56
<br>内容:用songxinye的办法会形成腹中有子,子中有父的欠套关系,不是一个理想的解决方案。<BR><BR>我的方案是这样的:<BR><BR>假设父对话框为CFatherDlg;<BR> 子对话框为CSonDlg,其为CFatherDlg的成员变量; <BR><BR>在CFatherDlg中的变量有:<BR>public:<BR> int m_nValue;<BR> CSonDlg m_SonDlg;<BR><BR>在CSonDlg中的变量有:<BR>public:<BR> int m_nValue;<BR> CButton m_btnTansfer;//传递m_nValue到父对话框的m_nValue;<BR><BR>为按钮m_btnTansfer添加消息响应函数:<BR>void CSonDlg::OnButtonTransfer() <BR>{<BR> // TODO: Add your control notification handler code here<BR> <BR> UpdateData(TRUE);//根据需要,是否有需要更新的控件变量<BR> m_nValue=100;//如果m_nValue不是控件变量;<BR> ((CFatherDlg*)(CDialog*)GetParent())->m_nValue=m_nValue;<BR>////////注意这里要强制转换两次!!!<BR><BR>//1:还可以利用这个方法直接给CFatherDlg中的控件赋值<BR>//((CFatherDlg*)(CDialog*)GetParent())->SetDlgItemInt(IDC_EDIT_VALUE,m_nValue);<BR>//2:直接从父对话框中获得变量,传到子对话框<BR>//((CFatherDlg*)(CDialog*)GetParent())->GetDlgItem(IDC_EDIT_VALUE)->GetWindowText(m_strValue);m_strValue是CSonDlg的成员变量;可以直接看到变化;<BR>//m_nYear=((CFatherDlg*)(CDialog*)GetParent())->m_nValue<BR><BR>}<BR><BR>这样就可以在子对话框不消失的情况下相互传递变量了。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lijing2001 回复日期:2003-01-23 11:38:56
<br>内容:upstream 兄!谢谢你!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-23 21:05:27
<br>内容:to upstream<BR>你说的腹中有子,子中有父的欠套关系,在你用的方法中是同样存在的,和我的没有什么不同,只是子窗口中的父窗口指针是基类中的私有变量,用GetParent获取,而父类中同样有字类的指针用GetWindow(GW_CHILD)获取,而这些指针都是CWnd类,用起来都必须强制类型转换,我觉得不如直接设一个变量方便,这两种方法是相同的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -