# 十分简短的！

Posted by 陈凯程 on March 20, 1998 at 03:57:12:

In Reply to: 可否请您示范 posted by 小吴 on March 18, 1998 at 16:34:11:

: 我不知道 subclass a window 如何解决呼叫函式指标的问题，可否请您指导一下，谢谢您!

用 SetWindowLong API ！

OldAddress = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf MyWndProc)

以上的一行程式码运用 SetWindowLong 告诉 Windows 程式要以 MyWndProc 这一个 Procedure 代替原来的 Window Procedure ，之后如果程式收到 Message 便会呼叫 MyWndProc ！但是我们必须在终止程式前将一切还原，所以要再用 SetWindowLong ！

SetWindowLong hWnd, GWL_WNDPROC, OldAddress

这将 Window Procedure 还原，否则可能带来 GPF 的恶果！重要的是， MyWndProc 一定要放在 BAS Module 中！

运用 Subclassing 的技巧可以做到极之多纯 VB 并不能做到的东西，例如：将 Form Maximize 到一定的大小，渐变色的 Caption Bar ，在 Textbox 中 Right Click 带出另外的 Context Menu ，得知 Form 被移动，增加 System Menu 的项目并接收有关的讯息等等！

Daniel Appleman 写的 Visual Basic 5.0 Programmer's Guide To The Win32 API 一书内详述如何拦截讯息的技巧，及大部份的 Win32 API 的使用方法，是一本 VB 拥护者必备的天书！

Follow Ups:

- Re: 还是不能完全使用函数指标 cww 18:08:30 3/20/98 (0)