Benutzerdefinierte Dialogfelder

Eine Anwendung kann benutzerdefinierte Dialogfelder erstellen, mithilfe einer Anwendung definierte Fensterklasse für Dialogfelder statt mithilfe der vordefinierten Dialogfeld im Feld Klasse. Anwendungen verwenden in der Regel diese Methode, wenn ein Dialogfeld ihre Haupt-Fenster ist, aber es auch nützlich ist für die Erstellung von modale und nicht modale Dialogfelder für Anwendungen, die standard überlappende Fenster haben.

Die Anwendung definierte Fensterklasse kann die Anwendung eine Fensterprozedur für die Dialog-Box und Prozess-Nachrichten definieren, bevor sie auf das Dialogfeld Feld Verfahren. Darüber hinaus kann die Anwendung ein Symbol von Klasse, eine Klasse Hintergrundpinsel und ein Klasse Menü für das Dialogfeld definieren. Die Anwendung muss die Fensterklasse registrieren, bevor Sie versuchen, ein Dialogfeld erstellen und die Atom-Wert oder den Namen der Fensterklasse, das Dialogfeld Feld Vorlage stellen.

Viele Anwendungen erstellen eine neue Dialogfeldklasse ersten abrufen die Klasseninformationen für die vordefinierten Dialogfeld im Feld Klasse, und übergeben an die GetClassInfo -Funktion, die eine WNDCLASS Struktur mit Informationen füllt. Die Anwendung ändert einzelne Member der Struktur, z. B. den Klassennamen, Pinsel und Symbol, dann die neue Klasse mithilfe der Funktion RegisterClass registriert. Füllt eine Anwendung die WNDCLASS Struktur eigenständig, muss es das CbWndExtra Mitglied auf der DLGWINDOWEXTRA festgelegt, ist die Anzahl der zusätzlichen Bytes benötigt das System für jedes Dialogfeld. Wenn eine Anwendung auch zusätzliche Bytes für jedes Dialogfeld verwendet, müssen sie über die extra-Bytes vom System benötigt werden.

Die Fensterprozedur für das benutzerdefinierte Dialogfeld hat die gleichen Parameter und Anforderungen wie jede andere Fensterprozedur. Im Gegensatz zu anderen Verfahren Fenster sollten jedoch die Fensterprozedur für dieses Dialogfeld die DefDlgProc -Funktion anstelle der Funktion DefWindowProc für alle Nachrichten aufrufen, die es nicht verarbeitet. DefDlgProc führt den gleichen Standard Message-Verarbeitung als die Fensterprozedur für die vordefinierten Dialogfeld, enthält die Dialogfeld im Feld Prozedur aufrufen.

Eine Anwendung kann auch benutzerdefinierte Dialogfelder erstellen, Unterklassen für die Fensterprozedur des vordefinierten Dialogfelds. Die SetWindowLong Funktion kann eine Anwendung die Adresse von der Fensterprozedur für ein bestimmtes Fenster festzulegen. Die Anwendung kann auch mithilfe der Funktion SetClassLong versuchen, Unterklasse, sondern tun also betrifft alle Dialogfelder im System, nicht nur Angehörige der Anwendungs.

Anwendungen, die benutzerdefinierte Dialogfelder manchmal erstellen bieten eine Alternative Tastaturschnittstelle für die Dialogfelder. Für nicht modale Dialogfelder kann dies bedeuten, die Anwendung nicht die Funktion IsDialogMessage aufgerufen und stattdessen alle Tastatureingaben in das benutzerdefinierte Fenster-Verfahren verarbeitet. In solchen Fällen können die Anwendung die WM_NEXTDLGCTL -Nachricht den Code erforderlich, um den Eingabefokus von einem Steuerelement zu einem anderen verschieben zu minimieren. Diese Meldung, wenn an DefDlgProc, übergeben den Eingabefokus auf ein angegebenes Serversteuerelement und aktualisiert die Darstellung der Steuerelemente, wie z. B. die Standard-Push-Button-Grenze verschieben oder eine automatische Optionsfeld festlegen.