高手:有关获取无模式对话框指针的有关问题!
请教各位高手:有关获取无模式对话框指针的问题!急!!!
我建立了基于对话框的应用程序CMyDlg,由CMyDlg调出无模式对话框C1Dlg,由C1Dlg调出无模式对话框C2Dlg,现在我想在C2Dlg中获取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()
------解决方案--------------------
HWND hwnd = FindWindow(NULL, "我的窗口 ");
if( hwnd )
{
CWnd* pWnd = CWnd::FromHandle(hwnd);
ASSERT( pWnd != NULL );
....
}
我建立了基于对话框的应用程序CMyDlg,由CMyDlg调出无模式对话框C1Dlg,由C1Dlg调出无模式对话框C2Dlg,现在我想在C2Dlg中获取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()
------解决方案--------------------
HWND hwnd = FindWindow(NULL, "我的窗口 ");
if( hwnd )
{
CWnd* pWnd = CWnd::FromHandle(hwnd);
ASSERT( pWnd != NULL );
....
}