如何在一个对话框中使用另一个对话框中的变量

来源:百度知道 编辑:UC知道 时间:2024/05/30 19:41:41
我做了两个对话框 其中一个对话框设置了一个cstring的变量,m_path表示打开文件的路径,然后我想在另外一个对话框中也使用这个路径变量,并且希望值没有改变,在网上找了些方法,但是不确定只是否被改变了,请高手指导

如果变量不在类中,那么在另一个对话框的cpp中定义extern CString m_path;然后就可以访问了!

如果变量在类中,那么设对话框A,对话框B
CString m_path在A的类里面

那么首先在A类中添加一个友元传参函数,比如PassParam(LPVOID lpParam), 然后在B类中添加一个public变量,比如CString m_path_in_A)。

然后在对话框B中调用A对话框,并且要在B中访问A类里的m_path,那么
void B::OnOpenWindowA()
{
A dlgA;
A.PassParam(this);
A.DoModal();
//之后B类里的m_path_in_A就是B类里的m_path的内容了,你也就可以访问了!
}

对于A类里的PassParam(LPVOID lpParam):
void PassParam(LPVOID lpParam)
{
B *dlgB = lpParam;
dlgB->m_path_in_A = m_path;
}

光是把变量设为public是不行的,我给你详细解释一下!
假如m_path在A类中,那么你如果要在B类中使用A类,那么就一定要:
A xxx; //xxx为变量名
然后A.yyy; //yyy为A类中的成员
这样看似可以,但是第一局A xxx;的意思是定义变量,这句执行后,xxx内的内容是A类构造函数之后的内容,里面绝对不包含你想要的m_path的真实值!此时只有用指针A *xxx=yyy;才行!但是在B类向A类传递参数的时候,如果你使用了new之类的运算符,也就相当于A xxx一样,也不会得到期望的东西,唯独只有传递this才可以!一定要this!而传参函数要传this而不导致变量重定义,就绝对不能在类里面,所以传参函数一定要是友元函数!

明白了吧!

你可以在.cpp文件的开头处定义一个全局变量,或是一个静态变量,