在对话框的OnInitDialog函数里面调用SetWindowLong(hWnd, GWL_WNDPROC, (LONG)WndProc);。运行的时候能接受到一些WM_ACTIVE之类的消息,但是鼠标的消息却接受不到,请问这是为什么?

解决方案 »

  1.   

    我试了一下,可以啊。消息都能响应,只是因为改变了窗口过程,一些关联函数没有调用,界面显示混乱,有些操作失败,可能要将CDialog的一下代码加进来。其实要改变窗口过程直接重载CDialog::WindowProc就好了。LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch(message)
    {
    case WM_LBUTTONDOWN:
    ::MessageBox(hWnd, "WM_LBUTTONDOWN", "", MB_OK);
    break;
    case WM_RBUTTONDOWN:
    ::MessageBox(hWnd, "WM_RBUTTONDOWN", "", MB_OK);
    break;
    }

    return DefWindowProc(hWnd, message, wParam, lParam);
    }
      

  2.   

    是不是处理了wm_nchittest等消息 ?那样的话,也收不到鼠标消息的