Creazione di una finestra di una sottoclasse

Sottoclasse di un'istanza di una finestra, chiamare la funzione SetWindowLong e specificare l'handle alla finestra per sottoclasse la bandiera GWL_WNDPROC e un puntatore alla procedura sottoclasse. SetWindowLong restituisce un puntatore alla routine di finestra originale; utilizzare questo puntatore per passare i messaggi alla procedura originale. La routine di finestra sottoclasse necessario utilizzare la funzione CallWindowProc per chiamare la routine di finestra originale.

Nell'esempio seguente viene illustrato come sottoclasse un'istanza di una modifica controllo in una finestra di dialogo. La routine di finestra sottoclasse permette il controllo di modifica ricevere tutti gli input della tastiera, compreso i tasti di invio e tab, ogni volta che il controllo ha lo stato attivo per l'input.

Metodo WNDPROC wpOrigEditProc; 
 
LRESULT APIENTRY EditBoxProc (
    HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hwndEdit; 
 
    Switch(uMsg) {caso WM_INITDIALOG: / / recupera l'handle per il controllo di modifica. 
            hwndEdit = GetDlgItem (hwndDlg, ID_EDIT); 
 
            / / Sottoclasse controllo di modifica. 
            wpOrigEditProc = SetWindowLong (WNDPROC) (hwndEdit, GWL_WNDPROC, EditSubclassProc (LONG)); 
            / / / / Continuare la procedura di inizializzazione. 
            / / return TRUE; 
 
        caso WM_DESTROY: / / Rimuovi la sottoclasse dal controllo di modifica. 
            SetWindowLong (hwndEdit, GWL_WNDPROC, wpOrigEditProc (LONG)); 
            / / / / Continuare la procedura di pulitura. 
            / / break; 
    } return FALSE; 
        UNREFERENCED_PARAMETER(lParam); 
} / / Sottoclasse procedura LRESULT APIENTRY EditSubclassProc (
    HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {se (uMsg = = WM_GETDLGCODE) return DLGC_WANTALLKEYS; 
 
    return CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
} 
 

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

Index