OnInitialUpdate 被调用两次问题

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回调了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值