2016-01-10 3 views
-1

Я думал, что OnInitialUpdate() функция вызывается перед OnUpdate() функции, но когда я открываю документ, OnInitialUpdate() называется первым, но после этого CView::OnInitialUpdate(); он называет OnUpdate(). Таким образом, после выполнения этого он не мог перейти к следующему шагу до выполнения функции OnUpdate().OnUpdate() вызывается перед OnInitialUpdate()

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

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

Я должен установить переменные pInputData и pOutputData к NULL перед тем OnUpdate(), но он установлен в NULL после OnUpdate()

Этот PinNameView класс является производным от класса CView.

Я хочу знать причину, почему это называется первым.

+0

Вопрос не имеет смысла. Ответ такой же бесполезный, как и очевидно: код ведет себя так, как он это делает, потому что он написан именно так. – IInspectable

+0

@ Необычный извините, я совершил большую ошибку! Я хотел знать, почему pInputData устанавливается в NULL после OnUpdate(), а не CView :: OnInitialUpdate(), о котором я говорил ранее. Код CView :: OnInitialUpdate(); выше было в первой строке функции, MFC рекомендует нам ввести код ниже CView :: OnInitialUpdate(). Но я думаю, что функция OnInitialUpdate() может инициализировать переменные, и теперь мне любопытно, почему она перешла к функции OnUpdate() в середине функции OnInitialUpdate(), которая, как я полагаю, должна идти после заканчивая все в OnInitialUpdate()? – Sean

+0

Это объяснение не делает вещи более ясными. Вы заявляете о допущениях, которые являются неправильными, и затем спрашивайте, почему вы заканчиваете поведение, которое предположения не могут объяснить. Пожалуйста, возьмите себе копию Jeff Prosise '[Программирование Windows с MFC] (http://www.amazon.com/dp/1572316950). – IInspectable

ответ

1

CView :: OnInitialUpdate call CView :: OnUpdate.

Итак, если вы выполняете реализацию OnUpdate, это зависит от переменных, которые должны быть установлены в OnInitialUpdate, сначала вы должны сделать свой материал инициализации, а затем вызвать реализацию по умолчанию.

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

    CView::OnInitialUpdate(); 
} 
Смежные вопросы