⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_28642.htm

📁 vc
💻 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-&gt;主对话框中的变量 
<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>&nbsp;&nbsp;&nbsp;&nbsp;CReQDlg pdlg=this;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(pdlg.DoModal()!=IDOK)<BR>&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(pdlg.m_DqName);<BR>}<BR>在CReQDlg.cpp(字对话框)的函数中:<BR>BOOL CReQDlg::OnInitDialog() <BR>{&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;CMy01Dlg* pdlg=new CMy01Dlg;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(pdlg-&gt;m_DqNuB[1]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDialog::OnInitDialog();<BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE; <BR>}<BR>pdlg-&gt;m_DqNuB[1]变量在主对话框的函数中变化,这样写不行吧?<BR>pdlg-&gt;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>&nbsp;&nbsp;&nbsp;&nbsp;子对话框为CSonDlg,其为CFatherDlg的成员变量; <BR><BR>在CFatherDlg中的变量有:<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp; int m_nValue;<BR>&nbsp;&nbsp;&nbsp;&nbsp; CSonDlg m_SonDlg;<BR><BR>在CSonDlg中的变量有:<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;int m_nValue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CButton m_btnTansfer;//传递m_nValue到父对话框的m_nValue;<BR><BR>为按钮m_btnTansfer添加消息响应函数:<BR>void CSonDlg::OnButtonTransfer() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your control notification handler code here<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateData(TRUE);//根据需要,是否有需要更新的控件变量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nValue=100;//如果m_nValue不是控件变量;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((CFatherDlg*)(CDialog*)GetParent())-&gt;m_nValue=m_nValue;<BR>////////注意这里要强制转换两次!!!<BR><BR>//1:还可以利用这个方法直接给CFatherDlg中的控件赋值<BR>//((CFatherDlg*)(CDialog*)GetParent())-&gt;SetDlgItemInt(IDC_EDIT_VALUE,m_nValue);<BR>//2:直接从父对话框中获得变量,传到子对话框<BR>//((CFatherDlg*)(CDialog*)GetParent())-&gt;GetDlgItem(IDC_EDIT_VALUE)-&gt;GetWindowText(m_strValue);m_strValue是CSonDlg的成员变量;可以直接看到变化;<BR>//m_nYear=((CFatherDlg*)(CDialog*)GetParent())-&gt;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 + -