C++ 在OnInitialUpdate()之前调用OnUpdate()

C++ 在OnInitialUpdate()之前调用OnUpdate(),c++,mfc,C++,Mfc,我以为OnInitialUpdate()函数在OnUpdate()函数之前调用,但是当我打开文档时,OnInitialUpdate()首先调用,但在这之后调用CView::OnInitialUpdate()它调用OnUpdate()。因此,在此CView::OnInitialUpdate()之后,它无法进一步进行下一步 void PinNameView::OnInitialUpdate() { CView::OnInitialUpdate(); pInputData = pOut

我以为
OnInitialUpdate()
函数在
OnUpdate()
函数之前调用,但是当我打开文档时,
OnInitialUpdate()
首先调用,但在这之后调用
CView::OnInitialUpdate()它调用
OnUpdate()
。因此,在此
CView::OnInitialUpdate()之后,它无法进一步进行下一步OnUpdate()函数之前执行code>

void PinNameView::OnInitialUpdate()
{
    CView::OnInitialUpdate();
    pInputData = pOutputData = NULL;
    //...
}

void PinNameView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
    //...
    this->Invalidate(false);
}
我必须在
OnUpdate()之前将变量
pInputData
pOutputData
设置为
NULL
, 但是在
OnUpdate()之后它被设置为
NULL

PinNameView
类派生自
CView


我想知道为什么先调用它。

CView::OnInitialUpdate调用CView::OnUpdate

因此,如果OnUpdate实现依赖于必须在OnInitialUpdate中设置的变量,则必须首先执行init操作,然后调用默认实现

void PinNameView::OnInitialUpdate()
{
    pInputData = pOutputData = NULL;
    //...

    CView::OnInitialUpdate();
}

这个问题没有多大意义。答案显然是毫无用处的:代码的行为方式是这样的,因为它是这样写的。@I不可检测的抱歉,我犯了一个大错!我想知道为什么在OnUpdate()之后pInputData设置为NULL,而不是我之前说过的CView::OnInitialUpdate()。代码CView::OnInitialUpdate();上面是函数的第一行,MFC建议我们在CView::OnInitialUpdate()下面键入代码。但我认为OnInPalpUpDeUT()的功能可能会初始化变量,现在我很好奇为什么它会在函数OnInPalpUpDeDE()的中间生成OnUpDeDeUTE()函数,这是我猜想在完成OnInPalpUpDeDeO()之后要做的事情。这个解释并不能使事情变得更清楚。你在陈述错误的假设,然后问,为什么你最终会做出假设无法解释的行为。请给自己拿一份杰夫·普洛塞斯的。