分享

VC++对话框间变量传递

 行走在理想边缘 2014-05-14

提供两种方案, 1 如果新建的对话框是主窗口的子窗体可以这样.将这五个变量定义为Public的,然后在子对话框中this->GetParent()->mNumber; mNumber为其中一个变量. 2 在新建的对话框类中提供一个Public的函数,在主程序中调用,将这五个变量值传递过去.

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

可以有两种方法,假设你的主窗口对话框类为CMainWnd,其中一个变量为str,新建的对话框类为CNewWnd:
第一种:取父窗口指针
在CNewWnd类中这样使用
/*当然要include   CMainWnd类的头文件*/
CMainWnd* pwnd = (CMainWnd*)GetParent();
此时,pwnd就是CMainWnd的一个窗口类指针了,可以直接使用它的公共成员,如
pwnd->str
第二种:全局窗口指针
在CMainWnd的cpp文件里定义一个全局窗口指针如:CMainWnd* g_pWnd;
然后在CMainWnd的构造函数里对它初始化:g_pWnd=this;
在CNewWnd类的cpp文件中声明这个外部变量
extern CMainWnd* g_pWnd,
这样,也可以直接使用CMainWnd类的公共成员,如:
g_pWnd->str

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

在对话框类里重载构造函数
MyDlg(变量1,变量2,...变量5)
{}

这样就OK了,很简单吧

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

我习惯使用火驹的方法。封装性较好,个人感觉。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

Dialog1的类名是CDialog1, 头文件是dialog1.h。里有成员变量CString str1, str2; Dialog2的类名是CDialog2, 头文件是dialog2.h。里有成员变量CString str11, str22; 要想将Dialog1里的变量传递给Dialog2里的变量,可以用这种方法:在类 CDialog1 的头文件里,引入Dialog2的头文件: #include "dialog2.h" 在类 CDialog1 的定义里声明Dialog2的对象: CDialog2 m_Dialog2; 在类 CDialog1 的cpp文件里的初始化函数里(其实应该在你需要的时候进行如下操作),UpdateData(TRUE); str1.Format("xixi");str2.Format("haha");m_Dialog2.str11 = str1; m_Dialog2.str22 = str2;UpdateData(FALSE);这样,就把值已经传给Dialog2了!要是想在Dialog2里使用str11,str22的时候,加上UpdateData(TRUE);

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

vc里面怎样实现对话框之间传递变量的值(原)
对话框1 CDlg1 该对话框 有个编辑框 Ceidt m1_text;对话框2 CDlg2 该对话框类 有个成员变量 Cstring m2_text 还有一个按钮Button2用于打开对话框1过程描述:打开对话框2,单击按钮Button2打开对话框1,给 m1_text赋值,关闭对话框1,将m1_text的值传给m2_text.实现:Dlg2.cpp
  CString   m2_text;  
  CDlg1   m_logindlg;  
  if(m_logindlg.DoModal()==ID_OK)  
  {   
          m2_text=m_logindlg.m1_text;   
  }  

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  crazyboy (ppp)于2005年05月25日02:26:37 星期三)
提到:

1.比较特殊情况下:
  比如:两个对话框关系是:点击对话框1的按钮,然后会运行对话框2
  可以这样:CXXXDialog2 dlg;
            dlg.xxx =  yyy; //yyy是对话框1的值,赋值给对话框2的xxx
2.两个对话框完全没有关联:
可以这样:
    a)把数据保存在文件里面,读写(操作.ini也不错)
    b)CWinApp类里面可以添加变量xxx;
      通过AfxGetApp()->xxx;来保存和读取变量;  

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

想把在主窗口得到的一个值例如   dcount=100;在一个对话框打开时间去的这个值 问题点数:50、回复次数:19

1 楼softsprite(软件精灵)回复于 2000-08-30 09:06:00 得分 0

如果需要传递的变量不多的话,在对话框类中建立相应的成员变量:  
  CMyDialog   myDialog(this);  
  myDialog.m_dcount   =   dcount;  
  if   (   myDialog.DoModal()   ==   IDOK   )  
  {  
      dcount   =   myDialog.m_dcount;  
  }  
   
  如果需要传递的变量比较多或比较复杂,可以专门建立一个结构放这些变量,在对话框类中建立这个结构类型的指针,用类似的方法传递指针即可。

2 楼luxes()回复于 2000-08-30 09:09:00 得分 10

把这个值定义为主窗口的public成员变量:m_dcount,  
  在dialog里:访问:AfxGetMainWnd()->m_dcount

3 楼skyrain(skyrain)回复于 2000-08-30 09:10:00 得分 0

这儿的dcount   在哪儿定义?CMyDialog   myDialog(this);应该写哪儿?  
   
 

4 楼Tiangz()回复于 2000-08-30 09:11:00 得分 0

在Dialog的.h文件中包含MainFrm.h,若dcount是一个public成员,则可以  
  GetMainFrame()->dcount,否则可以在MainFrame中定义一个函数专门得到该参数,在  
  Dialog中调用即可

5 楼softsprite(软件精灵)回复于 2000-08-30 09:25:00 得分 0

dcount是主窗口中的变量,是你自己提出来的呀!  
  CMyDialog   myDialog(this);这一整段代码可以放在主窗口中你需要弹出对话框的地方。比如你需要按某个菜单项弹出这个对话框,可以在主窗口处理这个菜单项的函数中使用这段代码。  
 

6 楼skyrain(skyrain)回复于 2000-08-30 10:41:00 得分 0

我在MainFrm.h中加入public变量dcount,在对话框的MyDialog.h中加入#include   "mainfrm.h"  
  可在用AfxGetMainWnd()->dcount时间编译报CWnd没有这个成员

7 楼magicwizard(巫师)回复于 2000-08-30 10:44:00 得分 0

softsprite在第一个回复里说得很详细,仔细看看分析一下.  
  或者你把自己的问题说得更详细一些.

8 楼skyrain(skyrain)回复于 2000-08-30 10:54:00 得分 0

我用MFC建立了一个单文档程序data,自己添加了一个对话框类,叫mydialog  
  在dataView.cpp中我得到一个变量   int   dcount=100,当点击一个按钮时打开我的对话框,在对话框  
  中我想用dcount的值,我该怎么做

9 楼a2000(夜雨)回复于 2000-08-30 11:08:00 得分 0

在CMyApp中建一个变量dcount;然后在CMyDialog   中用AfxGetApp()->dcount.就行了.

10 楼skyrain(skyrain)回复于 2000-08-30 11:11:00 得分 0

CMyApp是自定义的类吗

11 楼Holly()回复于 2000-08-30 11:18:00 得分 20

所有的AfxGetApp()或AfxGetMainWnd()的到的指针都需要强制转换  
  ((CMyApp*)AfxGetApp())和((CMainFrame*)AfxGetMainWnd())

12 楼Holly()回复于 2000-08-30 11:23:00 得分 0

另外,尽量采用softsprite在第一贴的方法,直接取变量的方法使代码的控制混乱,是不好的编码风格,应当避免,养成习惯就不好了?

13 楼skyrain(skyrain)回复于 2000-08-30 11:28:00 得分 0

softsprite的方法我看不懂,m_count在哪定义的,  
  dcount   =   myDialog.m_dcount;什么意思,写在哪儿(我是要取得dcount的值)  
 

14 楼softsprite(软件精灵)回复于 2000-08-30 11:40:00 得分 20

在MyDialog.h中定义:int   m_dcount;  
  在MainFrm.h中定义:int   dcount;  
  第一贴中的代码是在主窗口CMainFrame中的。  
  myDialog.m_dcount就是取得CMyDialog类的实例的成员变量m_dcount,然后这个变量可以和主窗口CMainFrame中的变量dcount互相交换值。  
  。。。。我的汗都下来了!  
 

15 楼xiaoyuer(我是一只虫)回复于 2000-08-30 12:09:00 得分 0

只要取得窗口类的指针即可!

16 楼hnalbert(再战)回复于 2000-08-30 12:13:00 得分 0

You   can   do   just   as   what   softsprite   told   you.  
  There   is   no   need   of   pointer   to   CWnd.

17 楼iforever(iforever)回复于 2000-09-01 14:42:00 得分 0

听HOLLY的

 

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

用资源分别建立两个对话框.两对话框无任何联系.
现在想将第1个对话框中EDIT编辑框中的数据传递给另一个对话框的EDIT编辑框中。
不知道如何解决。我是VC新手,希望高手能讲解具体一点,谢谢.

一句话
GetDlgItem(EDIT2的ID)-> SetWindowText(GetDlgItem(EDIT1的ID)-> GetWindowText());

 

回复于:2006-05-26 10:17:51 方法一:在第二个对话框中调用第一个对话框
方法二:在App类中定义一个变量,在第一个对话框中把控件值传给该变量,在第二个对话框中把该变量值传给控件

 

#5楼 得分:0回复于:2006-05-26 11:37:21

在需要实现该功能的地方调用:
(例如在一个对话框1类里面,把对话框1上的IDC_EDIT1里的内容传到
对话框2的IDC_EDIT2里面):
CString   strText;
GetDlgItem(IDC_EDIT1)-> GetWindowText(strText);   //得到对话框1的IDC_EDIT1内容
(FindWindow(NULL, "对话框2的标题 ")-> GetDlgItem(IDC_EDIT2))-> SetWindowText(strText);   //显示对话框1的IDC_EDIT1内容;
                  (FindWindow(NULL, "对话框2的标题 ")-> GetDlgItem(IDC_EDIT2))-> GetWindowText(strText);       //   得到显示对话框2的IDC_EDIT2内容(在strText里)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多