buf

BE something YOU love and understand
posts - 94, comments - 35, trackbacks - 0, articles - 2
   :: 首页 :: 新随笔 :: 联系 ::  :: 管理
问题重现:
使用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回调了。
只有注册用户登录后才能发表评论。