Window subclassing is trickier than you think. Consider this code sketch:

// Subclass the window for a little while
WNDPROC OldWndProc = SubclassWindow(hwnd, NewWndProc);
... do stuff ...
// Okay all done, remove our subclass by
// restoring the previous window procedure
SubclassWindow(hwnd, OldWndProc);
What could go wrong? We'll discuss it tomorrow.