Каждое окно имеет процедуру обработки сообщений. Процедура, соответственно, имеет адрес. Заюзав функцию getwindowlong с параметром gwl_wndproc, мы узнаем адрес функции-обработчика нужного нам окна. Запомнив сию несомненно важную цифирь, мы вызываем setwindowlong с тем же gwl_wndproc, дабы подсунуть окну другой адрес функции, которая, конечно же, у нас в модуле. Теперь наша функция будет огребать все сообщения, которые шлются окну, делать оргвыводы и адекватно реагировать (в число адекватных реакций входит вызов callwindowproc со старым адресом в качестве параметра, а то как перестанет всё отрисовываться, к примеру...).
Ну ты понял смысл, я думаю
Для дальнейшего продвижения на сём славном поприще сходи на
www.vbstreets.ru и из раздела с исходниками качни мой SubClasser.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас