Venster Procedure Superclassing

Superclassing is een techniek waarmee een toepassing een nieuwe venster klasse maken met de basisfunctionaliteit van de bestaande klasse, plus de verbeteringen van de toepassing. Een superklasse is gebaseerd op een bestaande venster klasse met de naam van de basisklasse. Vaak, kan de basisklasse is een klasse systeem global venster zoals een edit-besturingselement, maar het een venster klasse.

Een superklasse heeft zijn eigen venster procedure, genaamd procedure van de superklasse. De superklasse procedure drie acties bij ontvangst van een bericht kan nemen: het kan de boodschap doorgeven aan de oorspronkelijke venster procedure, het bericht wijzigen en doorgeven aan de oorspronkelijke venster procedure, of het bericht verwerken en niet doorgeven aan de oorspronkelijke venster procedure. Als de superklasse procedure een bericht verwerkt, het kan doen voor, na, of beide voordat en nadat dit wordt doorgegeven aan het oorspronkelijke venster procedure.

In tegenstelling tot een subklasse procedure, een procedure superklasse venster creatie berichten (WM_NCCREATE, WM_CREATE, enzovoort) kunt verwerken, maar het moet ook doorgeven aan de oorspronkelijke procedure basisklasse venster zodat de basisklasse venster procedure de initialisatieprocedure uitvoeren kan.

Naar een venster klasse superklasse roept een toepassing eerst de GetClassInfo -functie voor het ophalen van informatie over de basisklasse. GetClassInfo vult een WNDCLASS structuur met de waarden uit de WNDCLASS structuur van de basisklasse. Vervolgens de toepassing eigen sessiehandler in de hInstance lid van de WNDCLASS structuur wordt gekopieerd en vervolgens de naam van de superklasse in het lid lpszClassName . Als de basisklasse een menu heeft, moet de toepassing een nieuw menu voorzien van de dezelfde menu-id en naam van het menu kopiëren naar de lpszMenuName lid. Als de superklasse procedure het bericht WM_COMMAND verwerkt en het niet wordt overgedragen aan de procedure van het venster van de klasse base, is het menu hoeft niet bijbehorende-id. GetClassInfo retourneert niet het lpszMenuName, lpszClassNameof hInstance lid van de WNDCLASS structuur.

Een toepassing moet ook de lpfnWndProc lid van de WNDCLASS structuur instellen. De functie GetClassInfo vult dit lid met het adres van de oorspronkelijke venster procedure voor de klasse. De toepassing moet opslaan van dit adres, aan het doorgeven van berichten aan het oorspronkelijke venster procedure, en kopieer het adres van de superklasse procedure naar de lpfnWndProc lid. De toepassing kan, indien nodig, alle andere leden van de WNDCLASS structuur wijzigen. Nadat het vult de WNDCLASS structuur, registreert de toepassing de superklasse door het passeren van het adres van de structuur aan de functie RegisterClass . De superklasse kan vervolgens worden gebruikt voor het maken van windows.

Omdat superclassing een nieuwe venster klasse registreert, kunt een toepassing toevoegen aan zowel de klasse extra bytes en de extra venster bytes. De superklasse moet niet de oorspronkelijke extra bytes voor de klasse base of het venster gebruiken om dezelfde redenen dat een subklasse exemplaar of een globale subklasse niet hen gebruiken moet. Ook, als de toepassing extra bytes voor het gebruik ervan aan de klasse of het exemplaar van het venster voegt, moet het verwijzen naar van de extra bytes relatief ten opzichte van het aantal extra bytes gebruikt door de originele basisklasse. Omdat het aantal bytes dat wordt gebruikt door de basisklasse van één versie van de basisklasse naar de volgende, de startende verschuiving voor de superklasse van eigen variëren kan kunnen extra bytes ook variëren van één versie van de klasse base naar het volgende.

Index