2014-02-15 112 views
0

目前我正在研究可放大和縮小的遊戲編輯器。有問題,我可以做或者向上或向下滾動鼠標滾輪。我無法實現滾動,即如果我在編輯器類中調用input->mouseWheelUp(),我只能向上滾動。向下滾動不起作用了。我該如何解決這個問題?在編輯器的update方法鼠標滾輪只能向上或向下滾動

獲取鼠標滾輪meesage

LRESULT Game::messageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    if (initialized) // do not process messages if not initialized 
    { 
     switch (msg) 
     { 
     case WM_MOUSEWHEEL:        
       input->mouseWheelIn(wParam); 
      return 0; 
     } 
    } 
    return DefWindowProc(hwnd, msg, wParam, lParam); // let Windows handle it 
} 

Input類

void Input::mouseWheelIn(WPARAM wParam) 
{ 
    mouseWheel = GET_WHEEL_DELTA_WPARAM(wParam); 
} 

bool mouseWheelUp() 
{ 
    int wheel = mouseWheel; 
    mouseWheel = 0; 
    return wheel > 0; 
} 

bool mouseWheelDown() 
{ 
    int wheel = mouseWheel; 
    mouseWheel = 0; 
    return wheel < 0; 
} 

Editor類

void Editor::update() 
{ 
    if (input->mouseWheelUp()) 
    { 
     zoom += 0.1f; 
    } 

    if (input->mouseWheelDown()) 
    { 
     zoom -= 0.1f; 
    } 
} 

回答

1

看,你的第一個電話是mouseWheelUp,其重置內部緩存鼠標滾輪事件值爲0.在您的秒ond致電mouseWheelDown該值將爲0,因此該方法的返回結果始終爲false。

您應該以不同的方式處理該問題。例如,您可以將某種映射引入常量或枚舉,這表示鼠標輪子向上或向下事件。或者您可以在更新方法中處理原始傳入事件值。這可能是更好的方法,因爲它顯然是一個增量值,可能或多或少取決於您旋轉鼠標滾輪的次數。您應該考慮三角洲對縮放值進行更大或更小的更改。

1
case WM_MOUSEWHEEL: 
     if ((short)HIWORD(msg.wParam) < 0) 
     { 
      zoom-=3; 
     } 
     else 
     { 
      zoom+=3; 
     } 
     break; 

使用鼠標滾輪滾動,簡單和光滑的示例。

相關問題