2016-01-10 59 views
-1

我認爲之前OnUpdate()函數調用OnInitialUpdate()功能,但是當我打開該文檔,OnInitialUpdate()稱爲第一但這CView::OnInitialUpdate();後調用OnUpdate()。因此,它不能去執行OnUpdate()功能之前,下一步在這之後CView::OnInitialUpdate();進一步。的OnUpdate()之前的OnInitialUpdate()調用

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

void PinNameView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{ 
    //... 
    this->Invalidate(false); 
} 

我面前OnUpdate(), 的變量pInputDatapOutputData設置爲NULL但它設置爲NULLOnUpdate()

PinNameView類是從CView類派生的。

我想知道爲什麼它首先叫的原因。

+0

這個問題並沒有太大的意義。答案是無用的,因爲它很明顯:代碼的行爲方式是因爲它是這樣寫的。 – IInspectable

+0

@IInspectable對不起,我犯了一個大錯誤!我想知道爲什麼pInputData的OnUpdate()不是的CView :: OnInitialUpdate中(),我以前說過後設置爲NULL。代碼CView :: OnInitialUpdate();上面是在函數的第一行,MFC推薦我們在CView :: OnInitialUpdate()下鍵入代碼。但我認爲OnInitialUpdate()的函數可能會初始化變量,現在我很好奇它爲什麼會在函數OnInitialUpdate()中使用OnUpdate()函數,我猜應該這樣做完成OnInitialUpdate()? – Sean

+0

這個解釋並沒有使事情變得更清楚。你說的是假設,那是錯誤的,然後問,爲什麼你結束了假設無法解釋的行爲。請給自己一份Jeff Prosise'[使用MFC編程Windows](http://www.amazon.com/dp/1572316950)。 – IInspectable

回答

1

的CView :: OnInitialUpdate中調用的CView :: OnUpdate中。

所以如果你的OnUpdate實現依賴於必須在OnInitialUpdate中設置的變量,你必須先做你的init的東西,然後調用默認實現。

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

    CView::OnInitialUpdate(); 
} 
相關問題