Ableiten von Steuerelementen von einem Standardsteuerelement
Wie bei jeder von CWnd abgeleiteten Klasse können Sie das Verhalten eines Steuerelements ändern, indem Sie eine neue Klasse von einer vorhandenen Steuerelementklasse ableiten.
So erstellen Sie eine abgeleitete Steuerelementklasse
Leiten Sie die Klasse von einer vorhandenen Steuerelementklasse ab, und überschreiben Sie optional die
Create
Memberfunktion, sodass sie die erforderlichen Argumente für die BasisklassenfunktionCreate
bereitstellt.Stellen Sie Memberfunktionen des Nachrichtenhandlers und Nachrichtenzuordnungseinträge bereit, um das Verhalten des Steuerelements als Reaktion auf bestimmte Windows-Nachrichten zu ändern. Siehe Zuordnen von Nachrichten zu Funktionen.
Stellen Sie neue Memberfunktionen bereit, um die Funktionalität des Steuerelements zu erweitern (optional).
Die Verwendung eines abgeleiteten Steuerelements in einem Dialogfeld erfordert zusätzliche Arbeit. Die Typen und Positionen von Steuerelementen in einem Dialogfeld werden normalerweise in einer Dialogvorlagenressource angegeben. Wenn Sie eine abgeleitete Steuerelementklasse erstellen, können Sie sie nicht in einer Dialogvorlage angeben, da der Ressourcencompiler nichts über die abgeleitete Klasse kennt.
So platzieren Sie das abgeleitete Steuerelement in einem Dialogfeld
Betten Sie ein Objekt der abgeleiteten Steuerelementklasse in die Deklaration der abgeleiteten Dialogklasse ein.
Überschreiben Sie die
OnInitDialog
Memberfunktion in Ihrer Dialogklasse, um dieSubclassDlgItem
Memberfunktion für das abgeleitete Steuerelement aufzurufen.
SubclassDlgItem
"Dynamisch unterklassen" ein Steuerelement, das aus einer Dialogvorlage erstellt wurde. Wenn ein Steuerelement dynamisch unterklassig ist, verbinden Sie sich mit Windows, verarbeiten einige Nachrichten in Ihrer eigenen Anwendung, und übergeben Sie dann die neu Standard Nachrichten an Windows. Weitere Informationen finden Sie in der SubclassDlgItem-Memberfunktion der Klasse CWnd
in der MFC-Referenz. Das folgende Beispiel zeigt, wie Sie eine Außerkraftsetzung des Aufrufs OnInitDialog
SubclassDlgItem
schreiben können:
BOOL CSubDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);
return TRUE;
}
Da das abgeleitete Steuerelement in die Dialogklasse eingebettet ist, wird es erstellt, wenn das Dialogfeld erstellt wird, und es wird zerstört, wenn das Dialogfeld zerstört wird. Vergleichen Sie diesen Code mit dem Beispiel zum Hinzufügen von Steuerelementen von Hand.