从外部成员类访问MFC对话框元素

时间:2013-04-25 17:24:47

标签: visual-studio-2008 visual-c++ mfc static dialog

我正在尝试从对话框类外部调用我的MFC对话框类的非静态函数(它获取编辑框的值并将其作为字符串返回)。

即我有Dlg.cppcalc.cpp,我想从getEditBoxContents()致电calc.cpp。我知道要调用一个非静态函数,我应该在Dlg中有一个calc.cpp的元素来执行aDlg.getEditBoxContents()但是,执行Dlg aDlg = Dlg()然后执行aDlg.getEditBoxContents()给了我神秘的错误(我确信这不是我应该这样做的方式)。

有人可以指出我正确的方向或给我另一种方法从对话类外获取编辑框的内容吗?


感谢Nik,对我有用的解决方案是:

在非成员类中:

CEx3Dlg *pMainDlg = (CEx3Dlg *)AfxGetMainWnd();
pMainDlg->exp_ListBox.AddString("asd"); //Interact with GUI elements here.

1 个答案:

答案 0 :(得分:3)

有问题的代码是一行,所以我们无法一行一行地分析它......让我们尝试更“细化”的东西:

Dlg aDlg = Dlg()

因此,我们在这里声明一个名为Dlg的{​​{1}}类型的变量。它是使用默认构造函数初始化的。然后,我们构建一个 new 对话框(aDlg右侧的Dlg()部分)并将其分配给我们的=变量。

此时,我们所拥有的只是Dlg对象的一个​​实例。尚未创建相应的Windows对话框(因为尚未调用aDlgDoModal)。那么我们尝试调用Create。据推测,这个成员函数试图获取某些编辑框的内容。但是没有可以获取其内容的编辑框。

在不知道您要做什么的详细信息的情况下,通常情况下,您会想要一些这样的代码:

aDlg.getEditBoxContents()

请注意,Dlg aDlg; aDlg.DoModal(); /* create and display the dialog */ aDlg.getEditBoxContents(); 创建了一个模态对话框,该对话框将阻止访问程序中的其他窗口(这是一个过度概括,但请耐心等待一下;细节不是在这种情况下可能会对你产生影响)。因此,在单击关闭按钮或对话框上的“确定”按钮或“取消”按钮之前,不会调用DoModal函数。

不知道更多,很难提供帮助,但我希望这能为您提供一个开始的地方。