请教各位高手:有关获取无模式对话框指针的问题!急!!! 我建立了基于对话框的应用程序CMyDlg,由CMyDlg调出无模式对话框C1Dlg,由C1Dlg调出无模式对话框C2Dlg,现在我想在C2Dlg中获取C1Dlg的指针,以便能够在C2Dlg中访问到C1Dlg中的数据。请教各位高手,我该怎么做呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以在C2Dlg中定义一个函数,来接收一个方法,如:C2Dlg::SetThinkData(**** & x);//这里的SetThinkData就是用来C1Dlg的有效信息的,****为定义的有效类型也可以是一个结构,这样在C2Dlg中解析就可以了。 谢谢楼上的帮助,能不能像模式对话框那样,获取对话框指针,然后访问C1Dlg中的数据呢? 这些无模式对话框,从设计上来说,应该是从属于主对话框,它们应该由主对话框来管理,彼此之间还是不要知道为好。如果一定要知道的话,可以修改它们的构造函数,让这些无模式对话框在构造时就记住它们的“老大”是CMyDlg的一个对象,而这个对话框“老大”当然知道它的两个“小弟”并可以提供像getXXDlg之类的方法。这样在C1Dlg里可以先得到“老大”,再通过“老大”得到C2Dlg更好的做法是,由“老大”来做两者之间的协作。例如,在1里,一个文本框输入一个字符串,显示在2里,可以这样写:老大:CMyDlg{void display(CString &str);//在这个函数里,老大调用2里的函数,让2显示str};C1Dlg{private:CMyDlg & boss;public:C1Dlg(CMyDlg & boss, ...);//在构造函数里,把老大记住};C2Dlg{};假设1里有个按钮,把文本框里的东西在2里输出,那么可以在这个按钮的消息处理函数里写:boss.display(str);这样两个对话框之间就不必相互知道,更好的是,它避免了硬编码,可以让两个小弟独立设计而不相干涉。 使用方法传递吧:struct ValueStruct{int iValue1;int iValue2;int iValue3;};CDialog2::SetValue(ValueStruct& valuestruct){m_i1 = valuestruct.iValue1;}//当点击按钮时,调用SetValue() 最简单的方法:设置一个全局变量不就可以了。像theApp那样,哪都能用! 谢谢各位的帮助,已经解决了,用FindWindow函数就可以获取无模式对话框的窗体指针。 HWND hwnd = FindWindow(NULL,"我的窗口");if( hwnd ){ CWnd* pWnd = CWnd::FromHandle(hwnd); ASSERT( pWnd != NULL ); ....} 批处理判断复制是否成功 请问Ftp服务器,最多可以建多少个帐号? ActiveX 突然发现,但凡庸庸碌碌者,都有一个显著特点:办事拖拖拉拉 求RGB24转化为RGB16的算法或程序,要求转化后的图象显示清晰! CDatabase数据库重连问题,请高手不吝指教,急!项目马上要交付了! 令我烦恼的一个问题,请帮忙!解决后立即给分!! 内存泄露!程序中出现内存泄露,可是看来半天。。。 MFC怎样使用ADO连接数据库 谁做过网络上图像的传输 自己编写的软件可以上传到哪些共享软件站上供广大客户免费下载试用,这些共享软件站因此收费吗?上传文件大小有限制吗? 迷惑啊!!!!大虾指点一下
C2Dlg::SetThinkData(**** & x);//这里的SetThinkData就是用来C1Dlg的有效信息的,****为定义的有效类型也可以是一个结构,这样在C2Dlg中解析就可以了。
更好的做法是,由“老大”来做两者之间的协作。例如,在1里,一个文本框输入一个字符串,显示在2里,可以这样写:
老大:
CMyDlg
{
void display(CString &str);
//在这个函数里,老大调用2里的函数,让2显示str
};
C1Dlg
{
private:
CMyDlg & boss;
public:
C1Dlg(CMyDlg & boss, ...);
//在构造函数里,把老大记住
};
C2Dlg
{
};
假设1里有个按钮,把文本框里的东西在2里输出,那么可以在这个按钮的消息处理函数里写:
boss.display(str);
这样两个对话框之间就不必相互知道,更好的是,它避免了硬编码,可以让两个小弟独立设计而不相干涉。
struct ValueStruct
{
int iValue1;
int iValue2;
int iValue3;
};
CDialog2::SetValue(ValueStruct& valuestruct)
{
m_i1 = valuestruct.iValue1;
}
//当点击按钮时,调用SetValue()
设置一个全局变量不就可以了。
像theApp那样,哪都能用!
if( hwnd )
{
CWnd* pWnd = CWnd::FromHandle(hwnd);
ASSERT( pWnd != NULL );
....
}