Wyprowadzanie formantów z formantu standardowego
Podobnie jak w przypadku dowolnej klasy pochodnej CWnd, można zmodyfikować zachowanie kontrolki, wyprowadzając nową klasę z istniejącej klasy formantu.
Aby utworzyć pochodną klasę formantów
Utwórz klasę z istniejącej klasy sterującej i opcjonalnie przesłoń
Create
funkcję składową, aby dostarczała niezbędne argumenty funkcji klasyCreate
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
Osadź obiekt klasy pochodnej kontrolki w deklaracji pochodnej klasy okna dialogowego.
Zastąp funkcję składową w klasie okna dialogowego
OnInitDialog
SubclassDlgItem
, aby wywołać funkcję składową dla kontrolki pochodnej.
SubclassDlgItem
"dynamicznie podklasy" kontrolka utworzona 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ęć OnInitDialog
wywołanie metody 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.