0

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

即,我有Dlg.cpp并且calc.cpp我想getEditBoxContents()calc.cpp. 我知道要调用一个非静态函数,我应该有一个Dlgin的元素calc.cpp才能执行aDlg.getEditBoxContents(),但是,执行Dlg aDlg = Dlg()然后执行aDlg.getEditBoxContents()会给我带来神秘的错误(我确信这不是我应该这样做的方式)。

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


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

在非成员类中:

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

1 回答 1

3

有问题的代码是一行,所以我们不能真正逐行分析它......让我们尝试一些更“细化”的东西:

Dlg aDlg = Dlg()

所以,在这里我们声明了一个Dlg名为aDlg. 它是使用默认构造函数初始化的。然后我们构建一个对话框(Dlg()右侧的部分=)并将其分配给我们的aDlg变量。

此时,我们只有一个 Dlg 对象的实例。尚未创建相应的 Windows 对话框(因为DoModalCreate尚未调用)。那么我们尝试调用aDlg.getEditBoxContents(). 大概这个成员函数试图获取某个编辑框的内容。但是没有我们可以获取其内容的编辑框。

在不知道您要执行的操作的详细信息的情况下,通常,您可能希望拥有如下代码:

Dlg aDlg;
aDlg.DoModal(); /* create and display the dialog */
aDlg.getEditBoxContents();

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

不知道更多,很难提供帮助,但我希望这能给你一个起点。

于 2013-04-25T18:48:55.917 回答