Где вызвать DestroyWindow () диалога MFC? - PullRequest
3 голосов
/ 06 июля 2011

В настоящее время я работаю над диалогами в приложении MFC, и я - по общему признанию - совершенно новичок в MFC.

Допустим, у меня есть класс A (производный от CDialog), который использует класс B (также производный от CDialog). Таким образом, A::OnInitDialog() вызывает метод create(...) для B.

Теперь я увидел, что деструктор класса B содержит

if ( GetSafeHwnd() )
{
    DestroyWindow();
}

Это хорошо? В моем понимании было бы лучше вызвать метод B DestroyWindow() в A::OnDestroy(). Это верно?

Спасибо за вашу помощь!
Оливер

1 Ответ

3 голосов
/ 06 июля 2011

Одна вещь, которую вы, возможно, заметили, изучив MFC, это то, что это API-оболочка, а не строго объектно-ориентированный. В то время как мы хотели бы для использования RAII (Resource Acquisition Is Initialisation), MFC не создает окна в своем конструкторе. Он делает это, как вы правильно заметили, с помощью метода Create().

Поэтому для меня имеет больше смысла, учитывая то, как работает MFC, уничтожать B, когда уничтожается A (A::OnDestroy), поэтому я думаю, что вы идете по правильному пути.

...