GET_WHEEL_DELTA_WPARAM永远不会返回负数
问题描述:
我只看到从GET_WHEEL_DELTA_WPARAM返回的正数,即使它在我向我滚动鼠标滚轮时应该是负数。GET_WHEEL_DELTA_WPARAM永远不会返回负数
case WM_MOUSEWHEEL:
short wheel_delta = 0;
wheel_delta = GET_WHEEL_DELTA_WPARAM(Addtl_Info_L);
而且,此页here表示滚滚车轮向前给出了正数和向后一负,而这个页面here表明它是左,右,而不是向前和向后。
以下是完整的消息处理程序:
LRESULT CALLBACK Message_Handler(HWND App_Handle, UINT Message_Type, WPARAM Addtl_Info_W, LPARAM Addtl_Info_L) {
short wheel_delta(0);
switch(Message_Type) {
case WM_MOUSEWHEEL:
wheel_delta = GET_WHEEL_DELTA_WPARAM(Addtl_Info_L);
if (wheel_delta > 0) {
std::wostringstream outs;
outs << "Wheel delta is positive" << std::endl;
OutputDebugString(outs.str().c_str());
graphics_manager.camera_tilt = graphics_manager.camera_tilt + 0.1f;
} else if (wheel_delta < 0) {
std::wostringstream outs;
outs << "Wheel delta is negative" << std::endl;
OutputDebugString(outs.str().c_str());
graphics_manager.camera_tilt = graphics_manager.camera_tilt - 0.1f;
}
return 0;
}
return DefWindowProc(App_Handle, Message_Type, Addtl_Info_W, Addtl_Info_L);
}
答
您传递LPARAM
到GET_WHEEL_DELTA_WPARAM
。您应该通过WPARAM
(Addtl_Info_W
,而不是Addtl_Info_L
)。
+0
谢谢,我很惊讶,我错过了 – 2013-03-20 18:44:45
答
你应该表现出你的整个消息循环,或至少其中“Addtl_Info_L”的定义,因为它应该是wParam中“win32msg->的wParam”。
#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
也许您将short值转换为unsigned int或在测试中使用无符号格式字符串输出short值?您可以使用条件来检查否定结果。
if(wheel_delta < 0) { /* do something */ }
@chris,'GET_WHEEL_DELTA_WPARAM()'提取高位字本身,您不必事先应用HIWORD()。 – 2013-03-20 16:12:16
@FrédéricHamidi,哦,恩,谢谢。 – chris 2013-03-20 16:21:07
你能说明'Addtl_Info_L'是什么以及它是如何初始化的? – Paul 2013-03-20 16:23:53