如何使用 MFC 在项目的所有对话框中访问变量?

Posted

技术标签:

【中文标题】如何使用 MFC 在项目的所有对话框中访问变量?【英文标题】:how a variable can be access in all dialogs of a project using MFC? 【发布时间】:2010-07-02 07:21:37 【问题描述】:

我已经创建了一个文件打开对话框,它包含一个编辑控件,其变量是包含文件名的“路径”。我想要的是在其他对话框中使用这个变量的值,但它给出的错误是“路径”是一个未声明的标识符。 我通过右键单击编辑控件来声明路径,添加一个 CString 类型的变量。路径变量通过此代码获取其值

class CAboutDlg : public CDialog

public:    
CAboutDlg();    
static CString imgname;

在同一个班级,我是这样用的

CString image=CAboutDlg::imgname; 
CString szFilename(image);

并通过此代码传递路径值

path=dlg.GetPathName();
UpdateData(FALSE);
CAboutDlg::imgname=path;

但它仍然给出错误 CAboutDlg 和 imgname 在上面的代码中是未声明的标识符,其中我传递了路径的值。我做了同样的事情,我从网站上学到了现在有什么问题?请告诉 rwong

【问题讨论】:

显示一些代码会有很大帮助,例如你是如何声明“路径”的? 拜托,看在上帝的份上,给自己找一本像样的书,或者至少尝试阅读一些在线教程。那里有很多适合初学者的信息,如果您有更具体的问题,您可以随时回来。目前在我看来,你只是懒得自己学习一点...... 【参考方案1】:

在对话框关闭之前,将此“路径”传递回 CWinApp(通过在 CWinApp 中实现 Get/Set 函数)

从 CWinApp 派生的主类实际上是“全局”类(静态类或单例)。您希望放入全局变量的任何内容都可以放入您的 CWinApp 派生类中。变量可以被互斥体保护,监听器、订阅者等可以通过这个类作为中心来实现。

【讨论】:

我从这个站点codeguru.com/cpp/cpp/cpp_mfc/article.php/c803学到了全局变量的声明。我做了什么,我在我的问题中展示了它。请看【参考方案2】:

试试:

CFileDialog dlg(TRUE);
int result=dlg.DoModal();
if(result==IDOK)

    path.SetWindowText( dlg.GetPathName() );
    UpdateData(FALSE);

您不能将字符串分配给编辑 ctrl。您必须设置存储在编辑控件中的文本。

编辑:

你在你的课堂上定义这个。

 static CString imgname;

您还需要在一个地方定义静态变量(即不要在标题中定义)。即在关联的 cpp 文件中(以及在类定义之外),您要添加:

CString CAboutDlg::imgname;

【讨论】:

以上是关于如何使用 MFC 在项目的所有对话框中访问变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问父类mfc上的变量

如何访问 MFC 中模式对话框的项目?

如何改变mfc对话框中的控件中的字体大小

如何根据父对话框中设置的变量在子 MFC 对话框中显示值?

如何在 MFC No CLR 中访问 Winform ActiveX 控件

VC++ MFC工程中中如何将一个工程的资源(如对话框)复制到另外一个工程