【发布时间】:2013-04-19 17:13:04
【问题描述】:
我正在尝试从对话框类外部调用我的 MFC 对话框类的非静态函数(它获取编辑框的值并将其作为字符串返回)。
即,我有Dlg.cpp 和calc.cpp,我想从calc.cpp 呼叫getEditBoxContents()。我知道要调用非静态函数,我应该在calc.cpp 中有一个Dlg 的元素才能执行aDlg.getEditBoxContents() 但是,执行Dlg aDlg = Dlg() 然后执行aDlg.getEditBoxContents() 会给我带来神秘的错误(我相信这这不是我应该做的方式)。
谁能指出我正确的方向或给我另一种从对话框类外部获取编辑框内容的方法?
感谢 Nik,对我有用的解决方案是:
在非成员类中:
CEx3Dlg *pMainDlg = (CEx3Dlg *)AfxGetMainWnd();
pMainDlg->exp_ListBox.AddString("asd"); //Interact with GUI elements here.
【问题讨论】:
-
该解决方案对您很有效,因为您正在编写一个基于对话框的应用程序并希望获得指向应用程序主窗口的指针。虽然它适用于该特定情况下的其他人,但这不是万能药。
-
您不应该从外部弄乱对话框的 GUI 元素。您可以在将来更改它们(将 EditBox 变为列表框,通过单选控件列表更改复选框......)。检查this article 以获得更好的解释、正确的做法等。
-
谢谢。我有一种感觉,这不是很好的做法,但它对我的目的有用。以后我会看你的文章。
标签: visual-studio-2008 visual-c++ mfc static dialog