子类化
作用
- 修改某个窗口的回调函数
- 可以实现类似于补丁的效果
- 可以拦截消息
- 可以修改功能
限制
- 用于替换的 回调函数的 函数指针必须在 源程序的内存中
- 替换后可能会破坏源程序的正常运行
用法
SetWindowLong
返回原来的回掉函数CallWindowProc
转发消息
WNDPROC pSuperOldEditProc;// 保存窗口默认消息处理函数
//替换 回掉函数
pSuperOldEditProc = SetWindowLong(hEdit, GWL_WNDPROC, (DWORD)JcEditProcSuper);
// 用于替换的回调函数
LRESULT CALLBACK JcEditProcSuper(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CHAR:
{
::MessageBox(hWnd, "WM_CHAR响应", "超类化", MB_OK);
return 0;
}
//将我们不需要劫持的消息返回给原来的回掉函数
default: return ::CallWindowProc(pSuperOldEditProc, hWnd, message, wParam, lParam);
}
}