gpt4 book ai didi

c++ - 如何在不使用 ((CMainFrame*) AfxGetMainWnd ())->... 的情况下访问 Mainfrm 成员变量状态?

转载 作者:行者123 更新时间:2023-11-30 04:15:57 28 4
gpt4 key购买 nike

我在 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;
}

关于c++ - 如何在不使用 ((CMainFrame*) AfxGetMainWnd ())->... 的情况下访问 Mainfrm 成员变量状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18057395/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com