在 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("报告");