我在MFC中有MDI应用程序可以修改。我想检查标志的值,该标志是来自较低级别类的MainFrm的成员变量。但是我不想使用
'(((CMainFrame *)AfxGetMainWnd())-> IsFlagOn()'类的功能,因为为此,我必须在较低级别的类中提供mainfrm.h。在阅读了Why are circular references considered harmful?之后,我以某种方式感到这将在以后创建一些循环引用
还有什么其他方法可以从mainfrm类获取标志值。请指导!
注意:这里的类层次结构是mainfrm-> CTestExplorerFrame-> CTestExplorerView-> CTestExplorerTreeCtrl
我想从最低级别检查仅由mainfrm访问的标志
最佳答案
AfxGetMainWnd()返回一个CWnd *,可用于通过Windows消息系统与大型机进行通信。定义自定义消息并将此消息发送给CWnd *
#define UWM_MYREQUEST (WM_APP + 2)
int datatoget;
CWnd* pMainframe = AfxGetMainWnd();
pMainframe->SendMessage(UWM_MYREQUEST, (WPARAM)&datatoget, 0);
大型机需要这样的代码来接收和处理自定义消息:
ON_MESSAGE(UWM_MYREQUEST,OnMyRequest)
LRESULT CMainFrame::OnMyRequest(WPARAM wparam, LPARAM lparam)
{
int* ptoget = (int*)wparam;
*ptoget = m_datarequested;
return 0;
}