1

我在 MFC 中有一个要修改的 MDI 应用程序。我想从较低级别的类中检查一个标志的值,该标志是 MainFrm 的成员变量。但我不想使用 '((CMainFrame*) AfxGetMainWnd ())->IsFlagOn()' 之类的函数来访问它,因为为此我必须在较低级别的类中提供 mainfrm.h。读完这篇为什么循环引用被认为有害? 从 mainfrm 类获取标志值的其他方法是什么。请指导!

注意:这里的类层次结构是 mainfrm->CTestExplorerFrame->CTestExplorerView->CTestExplorerTreeCtrl 我想从最低级别检查仅由 mainfrm 访问的标志

4

2 回答 2

2

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;
}
于 2013-08-06T01:31:14.433 回答
0

我将声明一个(纯虚拟)接口类,您可以在其中进行纯虚拟调用以获取您在 CTestExplorerTreeCtrl 感兴趣的标志的值。然后MainFrame实现这个接口类,并传递一个指向CTestExplorerTreeCtrl的指针。这样您就可以避免对 MainFrame 类的任何引用。

于 2013-08-05T13:36:35.833 回答