MFC:在调用CView::OnInitalUpdate()之后调用哪个CFrameWnd函数?

MFC:在调用CView::OnInitalUpdate()之后调用哪个CFrameWnd函数?,mfc,Mfc,我有一个MFC应用程序,它使用CSplitterWnd创建多个窗格视图。该过程在调用CFrameWnd::OnCreateClient()中完成。之后,在某个时刻,各种视图都会调用其CView::OnInitialUpdate()函数。其中一个视图是CTreeView,另一个视图是CListView,具有在OnInitialUpdate()中设置的多列。我需要设置默认的CTreeView项目,它也会更新CListView。但是,如果我在OnInitialUpdate中设置默认值,CListVie

我有一个MFC应用程序,它使用
CSplitterWnd
创建多个窗格视图。该过程在调用
CFrameWnd::OnCreateClient()中完成。之后,在某个时刻,各种视图都会调用其
CView::OnInitialUpdate()
函数。其中一个视图是
CTreeView
,另一个视图是
CListView
,具有在
OnInitialUpdate()中设置的多列。我需要设置默认的
CTreeView项目
,它也会更新
CListView
。但是,如果我在
OnInitialUpdate
中设置默认值,
CListView
尚未设置各个列。因此,在完成所有这些之后,我似乎需要设置默认的
CTreeView项。我想我会在一些
CFrameWnd
回调中这样做。我的问题是我应该在什么时候这样做


蒂亚

看来您的视图之间存在依赖关系;那是不对的。 数据应该存储在文档中(即使是当前选择,如果它应该在视图之间共享的话)。 而负责更改的视图应该调用CDocument::UpdateAllViews()。因此,将调用OnUpdate()上的所有其他视图


请参见

OnInitialUpdate()
在初始化期间仅由框架调用一次。显示您的代码,并突出显示不适合您的内容。框架将为所有视图调用
OnInitialUpdate()
,您无法控制调用这些视图的顺序(文档模板或视图的创建顺序可能会影响它,但它没有文档记录)。一个简单的解决方法是在设置了
CListView
之后将自定义消息发布到
CTreeView
,然后设置
CTreeView
以响应该消息,而不是
OnInitialUpdate()
。我将其移动到了
OnShowWindow()
。这给了我现在需要的东西。这是因为“类别”窗口窗格最终会发送所选树项目已更改的消息,因此列表视图最终会自我更新,但更新太早(它尚未创建列)。因此,现在,我移动了
OnShowWindow()
中的选择顶部/根目录树项。不知道是否存在某种类型的
onitalUpdateComplete()
回调。