Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podobnie jak w przypadku dowolnej klasy pochodnej CWnd, można zmodyfikować zachowanie kontrolki, wyprowadzając nową klasę z istniejącej klasy kontrolki.
Aby utworzyć pochodną klasę kontrolek
Dziedzicz swoją klasę z istniejącej klasy kontrolki i opcjonalnie przesłoń funkcję składową
Create, aby dostarczała niezbędne argumenty do funkcjiCreatew klasie bazowej.Podaj funkcje składowe programu obsługi komunikatów i wpisy mapy komunikatów, aby zmodyfikować zachowanie kontrolki w odpowiedzi na określone komunikaty systemu Windows. Zobacz Mapowanie komunikatów na funkcje.
Udostępniaj nowe funkcje składowe, aby rozszerzyć funkcjonalność kontrolki (opcjonalnie).
Użycie pochodnej kontrolki w oknie dialogowym wymaga dodatkowej pracy. Typy i pozycje kontrolek w oknie dialogowym są zwykle określane w zasobie szablonu okna dialogowego. Jeśli tworzysz klasę kontrolki pochodnej, nie można jej określić w szablonie okna dialogowego, ponieważ kompilator zasobów nie wie nic o klasie pochodnej.
Aby umieścić kontrolkę pochodną w oknie dialogowym
Umieść obiekt pochodnej klasy kontroli w deklaracji pochodnej klasy okna dialogowego.
Zastąp członkowską funkcję
OnInitDialogw swojej klasie okna dialogowego, aby wywołać członkowską funkcjęSubclassDlgItemdla dziedziczonej kontrolki.
SubclassDlgItem "dynamicznie podklasuje" kontrolkę utworzoną na podstawie szablonu okna dialogowego. Gdy kontrolka jest dynamicznie podklasowana, należy podłączyć się do systemu Windows, przetworzyć niektóre komunikaty we własnej aplikacji, a następnie przekazać pozostałe komunikaty do systemu Windows. Aby uzyskać więcej informacji, zobacz funkcję składową SubclassDlgItem klasy CWnd w dokumentacji MFC. W poniższym przykładzie pokazano, jak można napisać przesłonięcie OnInitDialog, aby wywołać metodę SubclassDlgItem.
BOOL CSubDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);
return TRUE;
}
Ponieważ pochodna kontrolka jest osadzona w klasie okna dialogowego, zostanie ona skonstruowana podczas konstruowania okna dialogowego i zostanie zniszczona, gdy okno dialogowe zostanie zniszczone. Porównaj ten kod z przykładem w temacie Dodawanie kontrolek ręcznie.