MFC: функция OnInitialUpdate производного от CFormView класса - PullRequest
3 голосов
/ 23 июня 2009

Мой производный от CFormView класс имеет следующую структуру:

class FormViewClass : public CFormView
{
        ...
        FormViewClass();
        void Initialize();
        virtual void OnInitialUpdate();
        ...
};

В идеале я хотел бы вызвать функцию Initialize () в теле конструктора следующим образом:

FormViewClass::FormViewClass()
{
        ...
        // originally I want to call Initialize function here
        Initialize();
        ...
}

Однако, поскольку я хочу, чтобы эта функция отвечала за всю инициализацию этого класса при его создании, и она содержит инициализации объектов MFC, такие как комбинированный список, редактирование, флажки, переключатели и т. Д., Если я буду вместо этого вызывая здесь функцию Initialize (), как я и думал:

void FormViewClass::OnInitialUpdate()
{
    // Should I call Initialize function instead here?
    Initialize();
}

В настоящее время у меня не-MFC память и инициализация объекта в конструкторе (следовательно, вызывается вспомогательная функция Iniitalize () в конструкторе) и инициализация объекта MFC в функции-обработчике OnIniitalUpdate (). Было бы здорово услышать ваши мысли об этом, чтобы я мог правильно рефакторинг кода. Заранее спасибо.

1 Ответ

6 голосов
/ 23 июня 2009

Я думаю, что вы правы сделать это так, как вы делаете.

В общем, я бы попытался инициализировать вещи как можно раньше (но не раньше 8-), так что в конструкторе выполняются вещи, не связанные с GUI, а вещи с графическим интерфейсом в OnInitialUpdate имеют смысл.

(Если бы OnInitDialog существовало для CFormView, это, вероятно, было бы лучше, чем OnInitialUpdate, но Я не думаю, что это .)

...