Fenster Prozedur Erstellen von übergeordneten Klassen

Erstellen von übergeordneten Klassen ist eine Technik, die eine Anwendung eine neue Fensterklasse mit der grundlegenden Funktionalität der vorhandenen Klasse sowie Verbesserungen, die von der Anwendung bereitgestellte erstellen kann. Eine übergeordnete Klasse basiert auf einer vorhandenen Fensterklasse als Basisklassebezeichnet. Häufig, kann die Basisklasse ist ein System global Window-Klasse wie ein Edit-Steuerelement, es jedoch jede Fensterklasse.

Eine übergeordnete Klasse hat eine eigene Fensterprozedur, die Oberklasse-Prozedur aufgerufen. Die Oberklasse Verfahren können drei Aktionen nach dem Empfang einer Nachricht: Es kann die Nachricht an die ursprüngliche Fensterprozedur übergeben, ändern Sie die Nachricht und übergeben Sie sie an die ursprüngliche Fensterprozedur, oder Verarbeiten der Nachricht und nicht an die ursprüngliche Fensterprozedur übergeben. Wenn die Oberklasse-Prozedur eine Nachricht verarbeitet, kann hierzu vor, nach, oder beide vor und nach die Meldung an die ursprüngliche Fensterprozedur übergeben wird.

Im Gegensatz zu einer Unterklasse-Prozedur kann eine Oberklasse-Prozedur Schöpfung Fenstermeldungen (WM_NCCREATE, WM_CREATEund So weiter), aber es muss auch übergeben sie an die ursprüngliche Fensterprozedur der Basisklasse die Fensterprozedur, die Base-Klasse die Initialisierungsprozedur ausführen können.

Auf Oberklasse eine Fensterklasse Ruft eine Anwendung zunächst die GetClassInfo -Funktion zum Abrufen von Informationen über die base-Klasse. GetClassInfo füllt eine WNDCLASS Struktur mit den Werten aus der WNDCLASS Struktur der Basisklasse. Als nächstes die Anwendung ein eigene Instanzenhandle in der hInstance Mitglied der WNDCLASS Struktur kopiert und kopiert den Namen der übergeordneten Klasse in das LpszClassName Mitglied. Wenn die Basisklasse ein Menü hat, muss die Anwendung bieten ein neues Menü mit dem gleichen Menü-Bezeichner und kopieren Sie den Menünamen in das LpszMenuName Mitglied. Wenn die übergeordnete Klasse Prozedur die WM_COMMAND -Nachricht verarbeitet und es nicht an die Windows-Prozedur der Basisklasse leitet, muss das Menü nicht entsprechenden Bezeichner haben. GetClassInfo gibt nicht das LpszMenuName, LpszClassNameoder hInstance Mitglied der WNDCLASS Struktur zurück.

Eine Anwendung muss ebenfalls das LpfnWndProc Mitglied der WNDCLASS Struktur festgelegt. Die Funktion GetClassInfo füllt dieses Members mit der Adresse die ursprüngliche Fensterprozedur für die Klasse. Die Anwendung muss diese Adresse, zum Weiterleiten von Nachrichten an die ursprüngliche Fensterprozedur, speichern und kopieren Sie dann die Adresse der Oberklasse-Prozedur in der LpfnWndProc Mitglied. Die Anwendung kann, falls erforderlich, alle anderen Mitglieder der WNDCLASS Struktur ändern. Nachdem es die WNDCLASS Struktur füllt, registriert die Anwendung die Oberklasse an die RegisterClass -Funktion die Adresse der Struktur übergeben. Die übergeordnete Klasse kann dann verwendet werden, um Windows zu erstellen.

Da Fensterprozedur eine neuen Fensterklasse registriert, kann eine Anwendung die Klasse extra-Bytes und die zusätzlichen Fenster Bytes hinzufügen. Oberklasse muss nicht die original extra-Bytes für die Basisklasse oder Fenster aus den gleichen Gründen verwenden, dass eine Instanz-Unterklasse oder eine globale Unterklasse sie nicht verwenden soll. Wenn die Anwendung zusätzliche Bytes für die Verwendung der Klasse oder der Fenster-Instanz hinzufügt, muss es auch, die extra-Bytes bezogen auf die Anzahl der zusätzlichen Bytes von der ursprünglichen Basisklasse verweisen. Da die Anzahl der Bytes, die von der Basisklasse verwendet eine Version der Basisklasse, um die nächste, das Start-Offset für der Oberklasse variieren können extra-Bytes auch von einer Version der Basisklasse zum nächsten variieren.

Index