только колесо мыши может прокручивать вверх или вниз

В настоящее время я работаю над редактором игр, который может увеличивать и уменьшать масштаб. Есть проблема, которую я могу сделать, прокручивая колесико мыши вверх или вниз. Я не могу добиться как прокрутки, т. Е. Если я позвоню input->mouseWheelUp() в классе редактора я могу только прокрутить вверх. Прокрутка вниз больше не работает. Как я могу исправить эту проблему?

Получить колесо мыши

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
}

Входной класс

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;
}

Класс редактора

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

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

0

Решение

Глядя на вашего редактора update метод, ваш первый вызов mouseWheelUp, который сбрасывает внутреннее кэшированное значение события колеса мыши в 0. При вашем втором вызове mouseWheelDown значение будет 0, и поэтому возвращаемый результат этого метода всегда ложен.

Вы должны подойти к этой проблеме по-другому. Вы можете, например, ввести какое-то отображение для константы или перечисления, которое обозначает колесико мыши вверх или вниз. Или вы можете обработать в вашем методе обновления значение необработанного входящего события. Это, вероятно, лучший способ, так как это, очевидно, дельта-значение, которое может быть более или менее большим в зависимости от того, сколько вы вращаете колесо мыши. Вы должны принять во внимание дельту для внесения больших или меньших изменений в значение масштабирования.

1

Другие решения

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

Пример использования колесика мыши, простой и удобный.

1

По вопросам рекламы [email protected]