从另一个类或窗口访问Windows控件

时间:2014-04-05 22:04:35

标签: windows visual-c++ mfc findwindow

在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在任何情况下都不太理想。

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

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

最终的答案是投降到原来的班级:

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

1 个答案:

答案 0 :(得分:2)

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

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