急:帮忙解决从一个对话框中读取另一个对话框中的数据!

马鸣风萧萧 2003-03-02 12:00:05
我编了一个子对话框的程序,在主对话框中声明两个已经定义好的子对话框对象成员CDialog1 dlg1;CDialog2 dlg2; 然后自然是在主对话框的OnInitDialog()中生成两个子对话框,一个隐藏,一个显示。这些都很成功。然后我再dlg2中加入了一个CEdit控件,并在类CDialog2中声明了一个变量CString str,然后再CDialog2地实现文件中调用GetDlgItem(IDC_EDIT1)->GetWindowText(str),经测试,编辑控件的输入内容确实是输进了变量str中。
但当我在类CDialog1地实现文件中使用CDialog2的成员变量str的时候,采用以下方法:
CDialog2 dlg; CString str2=dlg.str;却无法得到str的值,请问这是为什么?该怎样才能在对话框2中得到对话框1的公有变量str的值呢?
难道非得在主对话框的App文件中声明str为全局变量吗?
...全文
293 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leoparder 2003-03-02
  • 打赏
  • 举报
回复
这样当然不能得到你在主对话框中的定义的CDialog2 dlg2中的str的值, 因为你在主对话框中定义的dlg2和在类CDialog1实现文件中定义的那个CDialog2 dlg根本就是两个变量嘛!
你可以设法在CDialog1实现文件中得到在主对话框中声明的那个CDialog2 dlg2变量(比如你在CDialog1的类中声明了一个指向主对话框的指针m_pMainDlg),然后在CDialog1中的实现文件这样:
CString str2 = m_pMainDlg->dlg2.str;

如果你是在主程序中处理数据交换的话,以及Dialog1和Dialog2都为非摸态对话框上面说的对。
但要是在Dialog1中处理数据交换,或为模态对话框上面的办法就不行了。

最好用消息发送的办法,那样无论什么情况都可以保证Dialog1获得Dialog2的数据.
如:定义消息WM_MYMESSAGE
在Dialog1中声明消息处理函数,影射消息

afx_msg void OnMyMessage(WPARAM wParam,LPARAM lParam);

OM_MESSAGE(WM_MYMESSAGE,OnMyMessage)

void OnMyMessage(WPARAM wParam,LPARAM lParam)
{
CString *pStr = new CString;
pStr = (CString *)wParam;
//添加对此字符串的处理
}

在对话框2中当需要通知对话框1时

CMainDlg*pDlg = (CMainDlg*)AfxGetApp()->GetMainWnd();//CMainDlg为主程序的类

CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
WPARAM wParam;
wParam = (WPARAM)str;

pDlg->dlg.PostMessage(WM_MYMESSAGE,wParam,0);


rockyluo 2003-03-02
  • 打赏
  • 举报
回复
你在dlg1中定义的dlg变量与主对话框中定义的dlg2没有任何联系,所以你赋的值肯定不对。你可以在dlg1中获得主对话框的指针,再通过该指针调用dlg2变量的str值。
hdsunwind 2003-03-02
  • 打赏
  • 举报
回复
这样当然不能得到你在主对话框中的定义的CDialog2 dlg2中的str的值, 因为你在主对话框中定义的dlg2和在类CDialog1实现文件中定义的那个CDialog2 dlg根本就是两个变量嘛!
你可以设法在CDialog1实现文件中得到在主对话框中声明的那个CDialog2 dlg2变量(比如你在CDialog1的类中声明了一个指向主对话框的指针m_pMainDlg),然后在CDialog1中的实现文件这样:
CString str2 = m_pMainDlg->dlg2.str;
GoldenSword 2003-03-02
  • 打赏
  • 举报
回复
你怎么定义两次Dialog2呢?而且不是主对话框得成员变量。
可能是第二次你没有DoModul吧,第一次的已经析构了
approach 2003-03-02
  • 打赏
  • 举报
回复
Maybe it is helpful to you.
http://www.codeguru.com/system/SharedMemory.shtml
pentiwolf 2003-03-02
  • 打赏
  • 举报
回复
请问怎么在CDialog1的类中声明了一个指向主对话框的指针m_pMainDlg?

---------------------------------
你可以将m_pMainDlg作为参数传给CDialog1的构造函数。
CDialog1::CDialog1(CMainDlg* m_pMainDlg)
{
...
}

然后调用的时候
CMainDlg* m_pMainDlg;
CDialog1 dlg(m_pMainDlg);
马鸣风萧萧 2003-03-02
  • 打赏
  • 举报
回复
CMyDialog1::CMyDialog1(CWnd* pParent /*=NULL*/)
: CDialog(CMyDialog1::IDD, pParent)
{

ASSERT(pParent);

//{{AFX_DATA_INIT(CMyDialog1)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}

运行发生ASSERT错误。


马鸣风萧萧 2003-03-02
  • 打赏
  • 举报
回复
请问怎么在CDialog1的类中声明了一个指向主对话框的指针m_pMainDlg?
用GetParent()吗?可他的返回值是CWnd*啊?!而不是CDialog*。
马鸣风萧萧 2003-03-02
  • 打赏
  • 举报
回复
感谢各位高手的指点,我是第一次在专业网站上发帖子,没想到有这么多热心的朋友,真的非常激动!谢谢大家。
内容概要:本文聚焦于“含虚拟惯量阻尼的大功率并网逆变器VSG控制策略与仿真验证”,系统研究虚拟同步发电机(VSG)技术在大功率并网逆变器的应用,旨在提升新能源并网系统的动态响应能力与运行稳定性。通过引入虚拟惯量与虚拟阻尼控制机制,使逆变器能够模拟传统同步发电机的惯性与阻尼特性,有效应对电网频率波动和负载突变带来的冲击。文档深入剖析了VSG的核心控制原理,包括有功-频率、无功-电压的下垂控制模型,并基于Simulink平台构建完整的系统仿真模型,对不同工况下的动态性能进行仿真分析与验证,充分展示了VSG在提升并网系统稳定性、增强电网支撑能力方面的优越性。; 适合人群:具备电力电子、自动控制理论及新能源并网技术背景,从事电气工程、可再生能源系统仿真与控制研究的研究生、科研人员以及相关领域的工程技术人员。; 使用场景及目标:① 掌握VSG控制策略在大功率并网逆变器的具体实现方法与参数设计流程;② 学习基于Simulink搭建高保真度并网逆变器动态仿真模型的技术路径;③ 深入探究虚拟惯量与虚拟阻尼对改善电网频率响应、抑制功率振荡的作用机理,服务于微电网、高比例可再生能源接入等复杂电力系统的稳定性优化与控制策略研究。; 阅读建议:建议结合提供的Simulink仿真文件同步操作,重点关注VSG控制环路的结构设计与关键参数(如虚拟惯量、阻尼系数)的整定方法,通过设置不同的电网扰动工况(如负载切换、频率突变)观察系统响应特性,从而深入理解VSG的动态调节机制与控制优势。同时可参考文涉及的其他电力系统控制案例,拓展对现代智能电网综合控制策略的认知视野。

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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