Creazione di procedura superclassi finestra

Creazione di superclassi è una tecnica che consente a un'applicazione creare una nuova classe finestra con le funzionalità di base della classe esistente, più miglioramenti fornite dall'applicazione. Una superclasse si basa su una classe di finestra esistente denominata della classe base. Frequentemente, la classe base è una classe di finestra globale del sistema, come un controllo di modifica, ma può essere qualsiasi classe di finestra.

Una superclasse ha una propria routine della finestra, chiamata la procedura di superclasse. La procedura di superclasse può prendere tre azioni al momento della ricezione di un messaggio: può passare il messaggio originale routine di finestra, modificare il messaggio e passarlo a routine di finestra originale, o elaborare il messaggio e non passare alla procedura di finestra originale. Se la procedura di superclasse elabora un messaggio, è possibile farlo prima, dopo, o sia prima e dopo passa il messaggio originale routine di finestra.

A differenza di una procedura di sottoclasse, una procedura superclasse può elaborare messaggi di creazione finestra (WM_NCCREATE, WM_CREATEe così via), ma devono anche passare loro originale classe base routine di finestra così che la routine della classe base finestra in grado di eseguire la procedura di inizializzazione.

Per una classe finestra superclasse, un'applicazione chiama innanzitutto la funzione di basare per recuperare informazioni sulla classe di base. Basare riempie una struttura WNDCLASS con i valori dalla struttura WNDCLASS della classe base. Successivamente, l'applicazione vengono copiati proprio handle di istanza hInstance membro della struttura WNDCLASS e copiarvi il nome della superclasse il membro lpszClassName . Se la classe base ha un menu, l'applicazione deve fornire un nuovo menu con gli identificatori di menù stesso e copiare il nome del menu nel membro lpszMenuName . Se la procedura di superclasse elabora il messaggio WM_COMMAND e non passa per la routine della finestra della classe base, il menu non deve avere identificatori corrispondenti. Basare non restituisce il membro lpszMenuName, lpszClassName, hInstance o della struttura WNDCLASS.

Un'applicazione inoltre necessario impostare il membro lpfnWndProc della struttura WNDCLASS . La funzione di basare riempie questo membro con l'indirizzo della routine di finestra originale per la classe. L'applicazione deve salvare questo indirizzo, per passare i messaggi originali routine di finestra e poi copiare l'indirizzo della procedura superclasse nel membro lpfnWndProc . L'applicazione può, se necessario, modificare tutti i membri della struttura WNDCLASS . Dopo che riempie la struttura WNDCLASS , l'applicazione registra la superclasse passando l'indirizzo della struttura alla funzione RegisterClass . Superclasse consente quindi di creare finestre.

Perché la creazione di superclassi registra una nuova classe di finestra, può aggiungere un'applicazione sia i byte di categoria extra e i byte finestra supplementare. Superclasse non deve utilizzare i byte supplementari originali per la classe di base o la finestra per le stesse ragioni che una sottoclasse di istanza o una sottoclasse globale non deve utilizzare li. Inoltre, se l'applicazione aggiunge byte supplementare per il suo utilizzo per la classe o l'istanza di finestra, esso deve riferimento i byte supplementari rispetto al numero di byte aggiuntivi utilizzati dalla classe di base originale. Perché il numero di byte utilizzati dalla classe di base possa variare da una versione della classe di base per il prossimo, l'offset iniziale per la superclasse byte supplementari possono variare da una versione della classe base per il prossimo.

Rimedio: Inserire il CD-ROM CD di MSDN Library.

Index