Vinduet prosedyren Superclassing

Superclassing er en teknikk som lar et program til å opprette en ny vindusklasse med de grunnleggende funksjonene i den eksisterende klasse, pluss forbedringer forsynt av programmet. En superklasse er basert på en eksisterende vindusklasse kalt grunnklasse. Ofte, grunnklassen er en global vindusklasse systemet som en redigeringskontroll, men det kan være noen vindusklasse.

En superklasse har sin egen vindusprosedyre, kalt superklasse prosedyren. Superklasse prosedyren kan ta tre handlinger ved mottak av en melding: kan det sender meldingen til den opprinnelige vindusprosedyre, endre meldingen og sende den til den opprinnelige vindusprosedyre, eller behandle meldingen og ikke sende den til den opprinnelige vindusprosedyre. Hvis superklasse fremgangsmåten, behandler en melding, kan det gjøre det før, etter, eller både før og etter den sender meldingen til den opprinnelige vindusprosedyre.

I motsetning til en underklasse-prosedyre, en superklasse prosedyre kan behandle vinduet etableringen meldinger (WM_NCCREATE, WM_CREATEog så videre), men det må også sende dem til opprinnelige basisklasse vinduet prosedyren slik at prosedyren basisklasse vinduet kan utføre sin initialiseringsprosedyren.

Til superklasse en vindusklasse kaller et program først den GetClassInfo -funksjonen til å hente informasjon om grunnklassen. GetClassInfo fyller en WNDCLASS struktur med verdiene fra WNDCLASS -strukturen av grunnklassen. Deretter programmet kopierer sin egen Forekomstreferanse til hInstance -medlem av WNDCLASS -strukturen, og kopierer navnet på superclass til lpszClassName -medlem. Hvis grunnklassen har en meny, må programmet gir en ny meny med de samme menyen identifikatorene og kopiere menynavnet i lpszMenuName -medlem. Hvis prosedyren superklasse behandler WM_COMMAND meldingen, og sender det ikke til vindusprosedyre av grunnklassen, trenger på menyen ikke har tilsvarende identifikatorer. GetClassInfo returnerer ikke lpszMenuName, lpszClassNameeller hInstance medlem av WNDCLASS -struktur.

Et program må også angi lpfnWndProc medlem av WNDCLASS -strukturen. Funksjonen GetClassInfo fyller dette medlemmet med adressen til den opprinnelige vindusprosedyre for klassen. Programmet må lagre denne adressen, til å sende meldinger til den opprinnelige vindu prosedyren, og deretter kopiere adressen til superklasse prosedyren til lpfnWndProc -medlem. Programmet kan, om nødvendig, endre alle de andre medlemmene av WNDCLASS -strukturen. Etter at den fyller WNDCLASS -strukturen, registrerer programmet superclass ved å sende adressen til strukturen til RegisterClass -funksjonen. Superclass kan deretter brukes til å opprette windows.

Fordi superclassing registrerer en ny vindusklasse, kan et program legge til ekstra klasse-byte og ekstra vindu-byte. Superclass må ikke bruke de opprinnelige ekstra bytene for grunnklassen eller vinduet av samme grunn at en underklasse forekomst eller en global underklassen ikke bør bruke dem. Også, hvis programmet legger til ekstra byte for bruken til enten klassen eller vinduet-forekomst, må den referere ekstra byte forhold til antall ekstra byte som brukes av den opprinnelige grunnklassen. Fordi antallet byte som brukes av grunnklassen kan variere fra én versjon av grunnklassen til neste, Start forskyvningen for superclass's egen kan ekstra byte også variere fra én versjon av grunnklassen til neste.

Index