2013-03-20 192 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 */ } 
相關問題