Posted on 2012-04-18 21:34
buf 阅读(730)
评论(0) 编辑 收藏 引用 所属分类:
MFC
问题重现:
使用VC7.1(估计其它版本也用同样问题)创建一个无文档支持的单文档(SDI)MFC应用,使用CSplitterWnd分割视图,重载CMainFrame::OnCreateClient,在其中一个分割区域(Pane)创建继承自CView的窗体(假设为class CMyView : public CListView),其它使用默认设置。重载CMyView::OnInitialUpdate方法并设置断点,你会发现这个方法被回调了两次。
经过一番调试发现,OnInitialUpdate的第一次回调发生在CSplitterWnd::CreateView方法中(winsplit.cpp),第二次回调发生在CMainFrame::LoadFrame方法中(winfrm.cpp),而两次回调都是由于这两个方法所给的参数CCreateContext *pContex为NULL引起的。
修改CXXXApp::InitInstance:
CCreateContext cc;
pFrame->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, &cc);
就不会产生第二次OnInitialUpdate回调了。