子类化

作用

  1. 修改某个窗口的回调函数
  2. 可以实现类似于补丁的效果
  3. 可以拦截消息
  4. 可以修改功能

限制

  1. 用于替换的 回调函数的 函数指针必须在 源程序的内存中
  2. 替换后可能会破坏源程序的正常运行

用法

  1. SetWindowLong返回原来的回掉函数
  2. 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);
        }
    }
Last modification:November 19, 2020
如果觉得我的文章对你有用,请随意赞赏