Наследование элементов управления от стандартного элемента управления

Как и в случае с любым классом, производным от CWnd, можно изменить поведение элемента управления, наследив новый класс из существующего класса элемента управления.

Создание производного класса элемента управления

  1. Наследуйте класс из существующего класса управления и при необходимости переопределите Create функцию-член, чтобы она предоставляла необходимые аргументы функции базового класса Create .

  2. Предоставьте функции-обработчик сообщения и записи карты сообщений, чтобы изменить поведение элемента управления в ответ на определенные сообщения Windows. См. сведения о сопоставлении сообщений с функциями.

  3. Предоставьте новые функции-члены для расширения функциональных возможностей элемента управления (необязательно).

Использование производного элемента управления в диалоговом окне требует дополнительной работы. Типы и позиции элементов управления в диалоговом окне обычно указываются в ресурсе шаблона диалога. Если вы создаете производный класс элемента управления, его нельзя указать в шаблоне диалога, так как компилятор ресурсов ничего не знает о производном классе.

Размещение производного элемента управления в диалоговом окне

  1. Внедрение объекта производного класса элемента управления в объявление производного класса диалогового окна.

  2. Переопределите OnInitDialog функцию-член в классе диалогов, чтобы вызвать SubclassDlgItem функцию-член для производного элемента управления.

SubclassDlgItem "Динамически подклассы" элемент управления, созданный на основе шаблона диалогового окна. При динамическом подклассе элемента управления вы подключаетесь к Windows, обрабатываете некоторые сообщения в собственном приложении, а затем передаете оставшиеся сообщения в Windows. Дополнительные сведения см. в функции-члене SubclassDlgItem класса CWnd в справочнике по MFC. В следующем примере показано, как можно написать переопределение OnInitDialog вызова SubclassDlgItem:

BOOL CSubDialog::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

Так как производный элемент управления внедрен в класс диалогов, он будет создан при создании диалогового окна и будет уничтожен при уничтожении диалогового окна. Сравните этот код с примером добавления элементов управления по руке.

См. также

Создание и использование элементов управления
Controls