在程序里做了两个窗口IDD_DIALOG1和IDD_DIALOG2,并分别为该两窗口新建了不同的类!
其中IDD_DIALOG1做为程序运行时的起动验证界面,在IDD_DIALOG1中我放了一个IDC_IPADDRESS1让用户填写登录到远方的服务器的IP地址,点击确定后进入IDD_DIALOG2,在IDD_DIALOG2所对应的类中我要用到IDD_DIALOG1中IDC_IPADDRESS1控件上用户所输入的值,想了很久都不知道怎么实现!希望大家帮忙!
其中IDD_DIALOG1做为程序运行时的起动验证界面,在IDD_DIALOG1中我放了一个IDC_IPADDRESS1让用户填写登录到远方的服务器的IP地址,点击确定后进入IDD_DIALOG2,在IDD_DIALOG2所对应的类中我要用到IDD_DIALOG1中IDC_IPADDRESS1控件上用户所输入的值,想了很久都不知道怎么实现!希望大家帮忙!
解决方案 »
- editlistctrl 如何设置fullrowselect
- 如何检测程序运行权限、动态请求管理员权限?
- 申请网络编程板块版主
- 请问对话框程序,如何在主界面显示之后弹出一模态对话框让用户输入登录信息?
- 调用ActiveX DLL的问题
- 程序控製程序
- 请教各位高手:MFX库函数中有没有类似于汇编中的中断处理的函数
- 想问问:用VC的MFC编程,多文档,在显示所画的图形时,如果屏幕不够大,怎么样才能使在显示时自动加上左右滚动条?(在View.cpp中实现画
- 关于怎样用RegSetValueEx,在注册表中的 问题! 我问了 N 遍了
- CClientDC 具体怎么用啊?
- 【请教】视类间的相互调用
- 关于ShellExecute()函数
比如修改IDD_DIALOG2对应类的构造函数,然后在构造的时候把在IDD_DIALOG1类中得到
的值传进去!
其实,这个问题实现的方法很多。但考虑到设计问题我推荐一个方式:多个界面都需要的数据必然有其全局性。但绝对不能象一楼说的,简单设置成全局变量。
这里可以明显看出来,你没有设计你的逻辑结构。没有建立整体的数据结构。
其实你应该有一个全局的数据结构来支持你的逻辑实现。
而你所说的数据,只不过是全局数据结构的一部分而已。具体的过程是:验证界面关闭后,从验证界面中把对应的数据取出来。然后放到全局数据中。在DoModal第二个对话框之前,把这个数据设置到第二个对话框中。注意:绝对不允许在对话框中修改全局数据。这样流程上会混乱。
if(dlg.DoModal()==IDOK)
{
UINT nIPAddress=dlg.m_nIPAddress
}
可以用sendmessage和copydata来实现不同窗口之间的通信
http://m2.tech.topzj.com/thread-5950-1-1.html
可以用sendmessage和copydata来实现不同窗口之间的通信
---------------------
人家是同一个程序的窗口间,这么做也太小题大作了吧
C2.m_ip=m_ip;//m_ip分别在两个类中都定义
//----------------
前面有朋友说可以用全局变量,可是我还是不知道怎么用啊!大家帮帮忙,这个问题难道就这么难吗?Delphi里面实现可是非常简单啊!
方法很多!
比如修改IDD_DIALOG2对应类的构造函数,然后在构造的时候把在IDD_DIALOG1类中得到
的值传进去!你说了半天到最后又回到我的问题上来了,我就是想知道怎么样才能传进去啊!.........................不过,我感觉其实我只想取IDD_DIALOG1类中的一个值,感觉一两个语句应该就可以了吧,没想到这么难,比方说可不可以先获得IDD_DIALOG1窗口句柄,然后再用类似:GetGlgItemText()函数从控件上获取值.大家给点建设,我想其实这应该是经常用到的嘛,大家平常是怎么处理这个传值的问题的呢!
{
ipaddress 类型的一个变量。
dlg2.GetDlgItemText(IDC_ipaddress1,变量);
}
这样的话,那个变量就是你要的值.
另外 :dlg2是IDD_DIALGO2的类变量。
extern "C" int g_nFlag; stdafx.cpp中的代码
int g_nFlag = 0;然后,这个g_nFlag就可以在任何地方使用了。其它地方定义也成,但在MFC中,stdAfx.h文件是任何一个.cpp文件都必须包含的。
方法二:直接从对话框中取。步骤如下:
1、给IDD_DIALGO1的IDC_IPADDRESS1加一个变量,比如说是m_uIPAddress.
2、给IDD_DIALOG1的IDOK事件添加一个函数。
OnOK()
{
UpdateData(TRUE);
}
3、给IDD_DIALOG2也添加一个变量m_uIPAddress(最好与IDD_DIALOG1中的同名)
主程序代码可以这么写
CDlg1 dlg1;
if (dlg1.DoModal() != IDOK)
{
return; // 不愿意验证的话,当然是返回了。
} CDlg2 dlg2;
dlg2.m_uIPAddress = dlg1.m_uIPAddress;
这样就可以了。
CStirng IPaddr;//这个变量要在头文件里定义为全局变量
即:
public:
CString IPaddr;
在程序里写:
GetDlgItemText(IDC_IPADDRESS1,IPaddr);
在IDD_DIALOG2中:
首先在程序的顶部包含IDD_DIALOG1的头文件,然后你可以传值了。比如你想把IDD_DIALOG1中的IPaddr传到IDD_DIALOG2中的变量Str,你可以这样写:
IDD_DIALOG1的类名 dlg;
CString Str;
Str=dlg.IPaddr;
这样就可以了。