0

OnInitialUpdate  这个函数在MSDN中讲到,Override this function to

perform any One-Time initialization that requires information about

the document.d

OnInitialUpdate  OnInitialDialog
两者性质差不多。
都是用于初始化界面的,由框架调用。
前者是在View即将显示时调用,后者则是在dialog即将显示时调用.

但是在之前做的一个东西中发现OnInitialUpdate  被调用了两次,一直没有

找到原因,在其它的demo中重新做也没有出现这个现象。今天终于在一篇帖

子中受到启发。
OnInitialUpdate  本身是指调用一次的,如create出来的view等情况下都正常。但是在下面的情况下就不一样了。
(下面的情况我试过了,可以用)
创建一个无文档支持的单文档(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回调了。


http://blog.csdn.net/promotercx/article/details/7572662

关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.