【发布时间】:2011-02-25 22:59:21
【问题描述】:
所以我以为这会很简单,但我忘了它是 MFC。而不是为可能需要对每个单独控件进行 GUI 更新的数据模型更改注册通知侦听器,我想为什么不注册一次,然后向所有打开的停靠窗格发送消息,并允许他们根据需要更新他们的控件自己的效率条款。
用于处理来自服务器的通知的回调函数如下所示:
void CMainFrame::ChangeCallback(uint32_t nNewVersion, const std::vector<uint32_t>& anChangedObjectTypes)
{
CObList panes;
GetDockingManager()->GetPaneList(panes); // assert failure
if (!panes.IsEmpty())
{
POSITION pos = panes.GetHeadPosition();
while (pos)
{
CDockablePane* pPane = dynamic_cast<CDockablePane*>(panes.GetNext(pos));
if (pPane)
pPane->PostMessage(DM_REFRESH, nNewVersion);
}
}
}
我得到的错误是 wincore.cpp 第 926 行的断言失败
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL); // right here
下面有一条评论说如果您跨线程传递控件可能会发生这种情况,但这是一个单线程 MFC 应用程序,这一切都是从主框架完成的。
有谁知道还有什么可能导致这种情况?
如果有另一种方法可以向 MFC 中所有打开的 CDockablePane 派生窗口发送消息也可以...
【问题讨论】:
标签: c++ user-interface mfc