Odvozování ovládacích prvků ze standardního ovládacího prvku
Stejně jako u jakékoli CWnd odvozené třídy můžete změnit chování ovládacího prvku odvozením nové třídy z existující třídy ovládacího prvku.
Vytvoření odvozené třídy ovládacího prvku
Odvozujte třídu z existující třídy ovládacího prvku a volitelně přepište
Create
členskou funkci tak, aby poskytovala nezbytné argumenty pro funkci základní třídyCreate
.Zadejte členské funkce obslužné rutiny zpráv a položky mapy zpráv pro úpravu chování ovládacího prvku v reakci na konkrétní zprávy systému Windows. Viz Mapování zpráv na funkce.
Zadejte nové členské funkce pro rozšíření funkčnosti ovládacího prvku (volitelné).
Použití odvozeného ovládacího prvku v dialogovém okně vyžaduje další práci. Typy a pozice ovládacích prvků v dialogovém okně se obvykle zadají v prostředku šablony dialogového okna. Pokud vytvoříte odvozenou třídu ovládacího prvku, nemůžete ji zadat v šabloně dialogového okna, protože kompilátor prostředků o odvozené třídě nic neví.
Umístění odvozeného ovládacího prvku do dialogového okna
Vložte objekt odvozené třídy ovládacího prvku do deklarace odvozené třídy dialogového okna.
OnInitDialog
Přepsat člen funkce v dialogovém okně třídy voláníSubclassDlgItem
členské funkce pro odvozený ovládací prvek.
SubclassDlgItem
"dynamicky podtřídy" ovládacího prvku vytvořeného ze šablony dialogového okna. Když je ovládací prvek dynamicky podtříděn, připojíte se k Windows, zpracujete některé zprávy ve vlastní aplikaci a pak předáte zbývající zprávy do Windows. Další informace naleznete v podtříděDlgItem členské funkce třídy CWnd
v mfc Reference. Následující příklad ukazuje, jak můžete napsat přepsání OnInitDialog
volání SubclassDlgItem
:
BOOL CSubDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);
return TRUE;
}
Vzhledem k tomu, že odvozený ovládací prvek je vložen do třídy dialogového okna, bude vytvořen při vytváření dialogového okna a bude zničen při zničení dialogového okna. Porovnejte tento kód s příkladem při přidávání ovládacích prvků ručně.