Fereastra procedura Superclassing

Superclassing este o tehnica care permite o cerere pentru a crea o nouă clasă de fereastra cu funcționalitatea de bază de clasă existente, plus îmbunătățiri prevăzute prin aplicarea. Un superclass se bazează pe o clasă de Ferestre existente numit clasă de bază. Frecvent, clasa de baza este un sistem global fereastra clasa cum ar fi un control de editare, dar poate fi orice clasă de Ferestre.

Un superclass are propriul fereastra procedură, numit superclass procedura. Procedura de superclass poate dura trei acțiuni la primirea unui mesaj: poate trece mesajul original fereastra procedurii, modifica mesajul și trece la regimul fereastra original, sau procesul de mesaj și nu trece la regimul fereastra inițială. Dacă procedura superclass procesează un mesaj, se poate face acest lucru înainte, după, sau ambele înainte și după ce trece mesajul original fereastra procedurii.

Spre deosebire de o procedură subclasă, o procedură de superclass poate procesa fereastra crearea mesaje (WM_NCCREATE, WM_CREATE, și așa mai departe), dar aceasta trebuie, de asemenea, trece-le la regimul de bază-clasa fereastra original astfel încât procedura fereastra bază de clasă pot efectua sale procedura de initializare.

Pentru superclass o clasă de Ferestre, o cerere apelurile primul funcția GetClassInfo pentru a prelua informații despre o clasă de bază. GetClassInfo umple o structură WNDCLASS cu valorile din structura WNDCLASS clasa de baza. Apoi, aplicarea copiază proprie mâner exemplu în membre hInstance din structura WNDCLASS și copiază numele superclass în membre lpszClassName . Dacă clasa de baza a unui meniu, cererea trebuie să oferă un meniu cu același identificatori de meniu și copiați numele meniului în membre lpszMenuName . Dacă procedura superclass procesează mesajul WM_COMMAND și nu o trece fereastra procedurii de a clasei de bază, din meniul nu au nevoie identificatori corespunzătoare. GetClassInfo nu se întoarce membru lpszMenuName, lpszClassNamesau hInstance de structura WNDCLASS.

Cererea trebuie, de asemenea, lpfnWndProc membru al setului de structura WNDCLASS . Funcția GetClassInfo umple acest membru cu adresa original fereastra procedura pentru clasa. Cererea trebuie să salvați această adresă, să treacă mesaje la procedura fereastra inițială, și apoi copiați adresa procedura superclass în membre lpfnWndProc . Cererea poate dacă este necesar, să modificați orice alți membri de structura WNDCLASS . După ce se umple structura WNDCLASS , aplicarea registrele superclass prin trecerea adresa structura la funcția de RegisterClass . Superclasa poate fi apoi utilizat pentru a crea windows.

Deoarece superclassing înregistrează o nouă clasă de fereastra, o cerere pot adăuga atât octeți clasa extra și octeți suplimentare fereastra. Superclasa nu trebuie să utilizați original octeți suplimentare pentru clasa de baza sau fereastra din acelea?i motive, că o subclasă de instanță sau o subclasă globale ar trebui să nu le utilizeze. De asemenea, dacă aplicarea adaugă octeți suplimentare pentru utilizarea sa fie clasa sau instanță fereastra, acesta trebuie să referință octeți suplimentar față de numărul de octeți suplimentare utilizate de către clasa de bază original. Deoarece numărul de octeți utilizat de clasă de bază poate varia de la o versiune de bază clasa următoare, decalajul început pentru propria lui superclass octeți suplimentare pot, de asemenea, variază de la o versiune a clasei de bază la următoarea.

Index