对话框之间的参数传递
来源:互联网 发布:乐高 淘宝 代购 编辑:程序博客网 时间:2024/06/04 18:03
1. 模态对话框
由父窗口传递参数给子窗口
反过来感觉不太可能,还没看到类似的实现.主要原因在于,一旦调用DoModal()函数,控制权就会交给调用该函数的对话框,一直到点击了OK或CANCEL退出,而且只会返回有限的几种值,如IDOK,IDCANCEL
示例:
void ADlg::OnPopbtn() {// TODO: Add your control notification handler code hereBDlg pbdlg;pbdlg.m_edit="i love u";//pbdlg.UpdateData(FALSE);pbdlg.DoModal();}
注意:PopDlg 对象dlg(子窗口)不能调用UpdateData()函数,否则会出错。
在dlg的InitDlg()函数中,是否会有m_edit的处理。因为在DoModal()函数会自动调用InitDlg()。
这样,在点击了Pop按钮之后,就会弹出的对话框中m_edit关联的EDIT中显示“i love u”。
由子窗口传递参数给父窗口
做实验发现,用非模态对话框的方法也可以。即:在子窗口中建立到父窗口的指针,然后给其成员变量赋值。
代码:
void BDlg::OnOK() { // TODO: Add extra validation here
ADlg * adlg=(ADlg *)this->GetParent(); adlg->m_edit="i hate u"; adlg->UpdateData(FALSE); CDialog::OnOK();}
2. 非模态对话框
由父窗口传递参数给子窗口
方法同模态对话框类似。
代码如下:
void ADlg::OnPopbtn() {// TODO: Add your control notification handler code here
BDlg * pbdlg=new BDlg();pbdlg->m_edit="i love u";pbdlg->Create(IDD_DIALOG1, (CWnd *)this);pbdlg->ShowWindow(SW_SHOW);}
注意:在使用非模态对话框时,如果用普通的变量,则该函数结束之后,变量的生存期就自动结束,所以窗口不会显示出来。
解决方法只能用指针(内存空间在栈上),或成员变量来解决。
个人觉得用成员变量更合适些,因为用指针会涉及到销毁问题,而析构函数并不知道该指针的地址,所以无法销毁,从而造成内存的泄露。
代码如下:
private:BDlg * m_pbdlg;
申明为指针便于动态进行构造,以免内存空间浪费。需要注意初始化。
if(m_pbdlg==NULL)m_pdlg=new BDlg();m_pbdlg->m_edit="i love u";m_pbdlg->Create(IDD_DIALOG1, (CWnd *)this);m_pbdlg->ShowWindow(SW_SHOW);
由子窗口传递参数给父窗口
假设父窗口对应类为ADlg,子窗口对应类为BDlg。
代码如下:
void BDlg::OnOK() { // TODO: Add extra validation here
ADlg * adlg=(ADlg *)this->GetParent(); adlg->m_edit="i hate u"; adlg->UpdateData(FALSE); DestroyWindow(); //CDialog::OnOK();}
非模态对话框的一个问题在于,调用CDialog的OnOK()函数时,会隐藏该对话框,而非销毁,所以需要调用DestoryWindow()函数来销毁窗口自己。
最佳方法:
是在看孙鑫的VC视频的时候看到的,确实是高人呀!
由于非模态对话框的执行并不会阻塞主对话框的执行,所以大多数时候只能用模态对话框。
对话框在执行DoModal()函数后,返回的时候窗口被销毁,但该对象仍然存在,所以仍然可以访问其中的成员变量。
示例如下:
void ADlg::OnPopbtn() {// TODO: Add your control notification handler code hereBDlg bdlg;
if(updateDlg.DoModal()==IDOK)
{CString sName=bdlg.m_sName;CString sID=bdlg.m_sID;}即可以在主对话框中直接访问模态对话框对象的成员变量,而不用非得在子对话框中获取父对话框的指针来传递参数。
- 对话框之间的参数传递
- 对话框之间的参数传递
- 对话框之间的参数传递
- VC 两个对话框之间的参数传递(1)
- VC 两个对话框之间的参数传递(1)
- C#如何在对话框之间传递参数
- MFC中实现父对话框与子对话框之间的参数传递,实例可测
- Mapreduce之间的参数传递
- fragment之间的参数传递
- Fragment之间参数的传递
- activity之间的参数传递
- Activity之间的参数传递
- Mapreduce之间的参数传递
- 对话框之间变量值的传递
- 对对话框之间的信息传递
- 6.对话框之间的数据传递
- 第七节 对话框之间的数据传递
- mfc对话框窗口之间变量的传递
- 用crosstool-ng建立arm交叉编译工具链
- Android OpenGL教程-第二课
- String comparision Operators
- Android SDK 历史版本
- 2011.7.8 在DOS中看Oracle能否连接到数据库测试命令
- 对话框之间的参数传递
- rdlc报表学习心得(一)
- 程序疑问求解!
- ssl
- SMS发送流程 Android2.2
- webfocus图表
- Swing控件(JPanel,Container等)设置背景图片
- CMD命令
- 增加系统安全的shell脚本