对CDialog设置GWL_WNDPROC,但是接受不到鼠标消息,请问是怎么回事?
在对话框的OnInitDialog函数里面调用SetWindowLong(hWnd, GWL_WNDPROC, (LONG)WndProc);。运行的时候能接受到一些WM_ACTIVE之类的消息,但是鼠标的消息却接受不到,请问这是为什么?
[解决办法]
我试了一下,可以啊。消息都能响应,只是因为改变了窗口过程,一些关联函数没有调用,界面显示混乱,有些操作失败,可能要将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);
}
[解决办法]
是不是处理了wm_nchittest等消息 ?那样的话,也收不到鼠标消息的