Per quanto riguarda in generale il concetto di subclassing nella programmazione OOP vale quanto dice menphisx.
Se parliamo invece del caso specifico di applicazioni a finestre Windows il subclassing, detto in due parole, è una tecnica con cui si vanno ad intercettare i messaggi di una finestra (o di un'intera classe di finestre) elaborandoli prima della finestra in questione. Un metodo comune di effettuare il subclassing è sostituire l'indirizzo della wndproc di una finestra con quello di una propria procedura, gestire i messaggi che interessano in questa procedura e richiamare la wndproc originale per tutti gli altri messaggi.
Ecco uno spezzone di codice di un programma a cui sto lavorando che fa uso di questa tecnica:
.codice:WNDPROC realMainIVWndProc; //Real Main IVW wndproc //... //Perform the subclass realMainIVWndProc=(WNDPROC)(LONG_PTR)SetWindowLongPtr(hMainWindow,GWLP_WNDPROC,(__int3264)(LONG_PTR)MainIVWndProc); //... //IrfanView main window window procedure LRESULT CALLBACK MainIVWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { //Message switch switch(uMsg) { case WM_MOUSEWHEEL: //Mouse wheel rotated //... break; //End mouse wheel rotated //... } //End message switch return CallWindowProc(realMainIVWndProc,hWnd,uMsg,wParam,lParam); //All other messages are passed to the real MainIVW wndproc } //End MainIVWndProc

Rispondi quotando