2013-03-20 115 views
1

我只看到从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); 
      } 
+0

@chris,'GET_WHEEL_DELTA_WPARAM()'提取高位字本身,您不必事先应用HIWORD()。 – 2013-03-20 16:12:16

+0

@FrédéricHamidi,哦,恩,谢谢。 – chris 2013-03-20 16:21:07

+3

你能说明'Addtl_Info_L'是什么以及它是如何初始化的? – Paul 2013-03-20 16:23:53

回答

2

您传递LPARAMGET_WHEEL_DELTA_WPARAM。您应该通过WPARAMAddtl_Info_W,而不是Addtl_Info_L)。

+0

谢谢,我很惊讶,我错过了 – 2013-03-20 18:44:45

1

你应该表现出你的整个消息循环,或至少其中“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 */ } 
相关问题