0

在 MFC 程序中,我试图使用不同 .cpp 文件中的代码从另一个(兄弟或女儿)窗口访问一个窗口(类)中的控件。通常,您使用在类 .cpp 文件中定义的 DDX_Control 变量访问控件。

DDX_Control(pDX, IDC_STATUS, m_Status); 

另一个窗口的代码位于不同的文件中,因此我无权访问控制变量 (m_Status)。我所做的是使用 FindWindow 找到主窗口,然后 GetDlgItem 找到我感兴趣的控件:

CWnd * tmpWnd = CWnd::FindWindow(NULL,"MainWindow");  // find the main dialog box
CStatic * tmpStatus = (CStatic*) tmpWnd->GetDlgItem(IDC_Status);
tmpStatus->SetWindowText(“Status Report);

这在调试器中工作正常,但在调试器外部执行时失败。FindWindow 正确获取窗口 ID,但 GetDlgItem 返回 null。

理想情况下,我想从另一个窗口访问控制变量 (m_Status),但我不知道该怎么做。我了解 GetDlgItem 在任何情况下都不理想。

一种解决方案是向主窗口类发送一条消息并告诉它要做什么,但我必须有一个例程来处理每个控件并知道如何处理我发送的任何类型的数据。

有没有“正确”的方法来做到这一点?谢谢

最终的答案是转换为原始类:

((CspDlg *)AfxGetMainWnd())->m_Status.SetWindowText("报告");

4

1 回答 1

3

由于您创建了“主”窗口,因此您有一个对象或指针。或者,您可以调用 AfxGetMainWnd() 来获取指向它的指针。然后您可以使用它来访问公共成员,例如 m_Status。您的所有窗口都是相互连接的,因此不必使用 FindWindow 在您自己的程序中查找任何窗口。

一些变量可能在另一个文件中定义的事实是不相关的。这可以通过适当使用#include "theotherfile.h" 和对象指针/引用来处理。

于 2014-04-05T22:33:22.127 回答