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
.