Наследование элементов управления от стандартного элемента управления
Как и в случае с любым классом, производным от CWnd, можно изменить поведение элемента управления, наследив новый класс из существующего класса элемента управления.
Создание производного класса элемента управления
Наследуйте класс из существующего класса управления и при необходимости переопределите
Create
функцию-член, чтобы она предоставляла необходимые аргументы функции базового классаCreate
.Предоставьте функции-обработчик сообщения и записи карты сообщений, чтобы изменить поведение элемента управления в ответ на определенные сообщения Windows. См. сведения о сопоставлении сообщений с функциями.
Предоставьте новые функции-члены для расширения функциональных возможностей элемента управления (необязательно).
Использование производного элемента управления в диалоговом окне требует дополнительной работы. Типы и позиции элементов управления в диалоговом окне обычно указываются в ресурсе шаблона диалога. Если вы создаете производный класс элемента управления, его нельзя указать в шаблоне диалога, так как компилятор ресурсов ничего не знает о производном классе.
Размещение производного элемента управления в диалоговом окне
Внедрение объекта производного класса элемента управления в объявление производного класса диалогового окна.
Переопределите
OnInitDialog
функцию-член в классе диалогов, чтобы вызватьSubclassDlgItem
функцию-член для производного элемента управления.
SubclassDlgItem
"Динамически подклассы" элемент управления, созданный на основе шаблона диалогового окна. При динамическом подклассе элемента управления вы подключаетесь к Windows, обрабатываете некоторые сообщения в собственном приложении, а затем передаете оставшиеся сообщения в Windows. Дополнительные сведения см. в функции-члене SubclassDlgItem класса CWnd
в справочнике по MFC. В следующем примере показано, как можно написать переопределение OnInitDialog
вызова SubclassDlgItem
:
BOOL CSubDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);
return TRUE;
}
Так как производный элемент управления внедрен в класс диалогов, он будет создан при создании диалогового окна и будет уничтожен при уничтожении диалогового окна. Сравните этот код с примером добавления элементов управления по руке.