![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
如何在一个对话框中使用另一个对话框中的变量
我做了两个对话框其中一个对话框设置了一个cstring的变量,m_path表示打开文件的路径,然后我想在另外一个对话框中也使用这个路径变量,并且希望值没有改变,在网上找了...
我做了两个对话框 其中一个对话框设置了一个cstring的变量,m_path表示打开文件的路径,然后我想在另外一个对话框中也使用这个路径变量,并且希望值没有改变,在网上找了些方法,但是不确定只是否被改变了,请高手指导
展开
7个回答
展开全部
如果变量不在类中,那么在另一个对话框的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而不导致变量重定义,就绝对不能在类里面,所以传参函数一定要是友元函数!
明白了吧!
如果变量在类中,那么设对话框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而不导致变量重定义,就绝对不能在类里面,所以传参函数一定要是友元函数!
明白了吧!
展开全部
对话框?你说的是变成界面吧。
一个作为主模块,另一个作为主模块调用的模块并且把被调用的文件名也改成模块名就好。
这样变量不用再次声明也能用
一个作为主模块,另一个作为主模块调用的模块并且把被调用的文件名也改成模块名就好。
这样变量不用再次声明也能用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2008-06-20
展开全部
你可以在.cpp文件的开头处定义一个全局变量,或是一个静态变量,如m_PATH,然后在第一个对话框的m_path得到值后给m_PATH保存一下,这样第二个框就可以使用全局变量m_PATH了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类与之间访问 public成员可以共享数据,但共享的是类的实例当前的数据,如果m_path还没被填充正确数据或者数据失效了,再访问肯定得不到正确结果。
有个办法,你可以写注册表,在某个位置写入一个value,取得时候从这里取,这样就不依赖对话框的状态
有个办法,你可以写注册表,在某个位置写入一个value,取得时候从这里取,这样就不依赖对话框的状态
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,m_path要声明为public,如果不声明为public,也可以定义一个public的函数存取m_path.
其次,拥有m_path变量的窗口不能关闭,关闭后该变量就不存在了.
接着,在调用窗口要有一个指针变量指向拥有m_path的窗口;如CWnd* pWnd=(CWnd*)new CPathDlg();(CPathDlg拥有m_path变量);
最后,在需要的时候,就可以这么用:CString strPath=((CPathDlg*)pWnd)->m_path;
其次,拥有m_path变量的窗口不能关闭,关闭后该变量就不存在了.
接着,在调用窗口要有一个指针变量指向拥有m_path的窗口;如CWnd* pWnd=(CWnd*)new CPathDlg();(CPathDlg拥有m_path变量);
最后,在需要的时候,就可以这么用:CString strPath=((CPathDlg*)pWnd)->m_path;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询