两个dialog之间如何传递数据?

snow_wolf_lake 2006-12-12 10:11:33
就是在第一个dialog里定义的某变量的值,怎样传递到第二个dialog里.

...全文
857 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
snow_wolf_lake 2007-03-12
  • 打赏
  • 举报
回复
谢谢各位了!!!
好久没来CSDN了,结贴了。可惜我分太少。只能给先答复的人了
抱歉。
dadi0189 2006-12-15
  • 打赏
  • 举报
回复
楼主的意思是传递数据,其实就是访问对话框对象的变量,这个其实很简单,首先你要想办法得到那个对话框对象的指针有以下二种方法:
一.用Findwindow函数得到对话框窗体句柄,然后再用Fromhandle得到对象指针.
二.在APP对象或主窗体中定义一个存放对话框指针m_pDlg,当对话框产生之际在构造函数里把this指针赋予m_pDlg,记得在对话框对象的析构函数里置m_pDlg == NULL;

我经常用第二种方法,很方便,有了对话框对象指针那就可以访问其成员变量或成员函数了.
shawnwan 2006-12-15
  • 打赏
  • 举报
回复
SendMessage里面执行接收消息的对话框资源ID
wuzoujing 2006-12-15
  • 打赏
  • 举报
回复
magicyang87(magicyang)
to hhily()
公用变量是针对一个类而言的,不用extern
全局变量是针对一个完整的程序而言的,但若不是跨文件使用的话,也不用extern
试一下吧,都是很浅显的东西

公用变量的说法倒是少见,直接说成员变量不就行了
标准说法更容易明白
xyz666 2006-12-13
  • 打赏
  • 举报
回复
to beatle_1983():
如果这两个对话框之间存在着子父对话框的关系,你是想将子对话框的数据值传给父窗口吗?
在子窗口中得到父窗口的指针,然后将值传给它就可以了!比如:
CTestDlg *pCTestDlg;
pCTestDlg = (CTestDlg *)GetParent();
pCTestDlg->num = m_edit;
hhlily 2006-12-13
  • 打赏
  • 举报
回复
公用变量要采用object.val的引用方式?是什么样的引用方式?

我查了资料,它的用法和全局变量一样,都是用extern,是吗?
magicyang87 2006-12-13
  • 打赏
  • 举报
回复
当然不是了,全局变量可以直接引用,公用变量要采用object.val的引用方式,程序大的情况下使用全局变量容易造成重名。
hhlily 2006-12-13
  • 打赏
  • 举报
回复
to magicyang87(magicyang) :
公用变量不就是全局变量吗?请教
firein 2006-12-13
  • 打赏
  • 举报
回复
学习
beatle_1983 2006-12-13
  • 打赏
  • 举报
回复
void CSettingDlg::OnBtnBright()
{
// TODO: Add your control notification handler code here
CBrightDlg m_BrightDlg;
m_BrightDlg.m_dwKeyValue = m_dwKeyValue;//后一个m_dwKeyValue为CSettingDlg的成员变量
m_BrightDlg.DoModal();
}
但是我要从CBrightDlg对话框中获取Cedit中的数据呢?而不是将CSettingDlg中的数据传递给CBrightDlg呢?意思就是反起来!

magicyang87 2006-12-13
  • 打赏
  • 举报
回复
呵呵,唉...
hhlily 2006-12-13
  • 打赏
  • 举报
回复
你说的公用变量,原来是public
magicyang87 2006-12-13
  • 打赏
  • 举报
回复
所谓两个对话框比如dlg1,dlg2传递数据,相互间可以访问对方的公用变量不就行了吗
如dlg1.m_strV=dlg2.m_strB;
hhlily 2006-12-13
  • 打赏
  • 举报
回复
楼上:
搂主要求的是两个对话框之间传数据,针对一个类怎么可以
magicyang87 2006-12-13
  • 打赏
  • 举报
回复
to hhily()
公用变量是针对一个类而言的,不用extern
全局变量是针对一个完整的程序而言的,但若不是跨文件使用的话,也不用extern
试一下吧,都是很浅显的东西
zaodt 2006-12-12
  • 打赏
  • 举报
回复
呵呵!我明白楼主的意思了。

你在第二个对话框中建立一个成员变量,如:

===========================================

UINT m_nProducts;

//然后在第一个对话框中的函数中写:

CMyDialog2 MyDialog2;

MyDialog2.m_nProducts = x; // 这里就是你要传递的变量

MyDialog2.DoModal();

===========================================
whatabig 2006-12-12
  • 打赏
  • 举报
回复
如果两个对话框之间有调用关系,可以传递参数.

我用自定义的构造函数。
CDlg2(param1,param2...paramN)
CDlg2(struct param&)
zcp126 2006-12-12
  • 打赏
  • 举报
回复
1 全局
2 dlg1用成员 int m_test;方法SetValue(int a)和GetValue(){ return m_test;}
dlg2中#include "dlg1.h",调用dlg1.GetValue();
snow_wolf_lake 2006-12-12
  • 打赏
  • 举报
回复
有点头绪了
lily_123567(lili) 说的:"2.在两个对话框里分别保留另一个对话框的指针,用两个对话框的公用变量传递数据",公用变量还是全局的吧?
全局变量是不是一般都在stdafx.h里定义的?
wuzoujing 2006-12-12
  • 打赏
  • 举报
回复
最简单方法就是定义全局变量
如果两个对话框之间是平行的(没有直接调用关系),就用全局变量
如果两个对话框之间有调用关系,可以传递参数.
加载更多回复(7)

16,548

社区成员

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

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

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