data 2018/10/17 add WJB
用win32api写了一个窗体,在捕获鼠标事件时除了问题,无法获取鼠标左键和右键的抬起事件,尝试了很多方式,最终找到了解决方法。
错误写法如下:
LRESULT CALLBACK GLWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_MOUSEMOVE:
break;
case WM_RBUTTONDOWN:
break;
case WM_LBUTTONDOWN:
break;
case WM_RBUTTONUP:
break;
case WM_LBUTTONUP:
break;
default:
break;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
修改后的写法:每个分支加上 return 即可。
switch (msg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
return 0;
case WM_RBUTTONDOWN:
OnRMouseDown();
break;
return 0;
case WM_LBUTTONDOWN:
OnLMouseDown();
break;
return 0;
case WM_RBUTTONUP:
OnRMouseUp();
break;
return 0;
default:
break;
return 0;
}
但是具体原理不知道,如果哪位明白希望给我留言,希望大家分享一下。