gpt4 book ai didi

c++ - 鼠标滚轮只能向上或向下滚动

转载 作者:行者123 更新时间:2023-11-28 02:56:46 25 4
gpt4 key购买 nike

目前我正在开发一个可以放大和缩小的游戏编辑器。有一个问题,我可以向上或向下滚动鼠标滚轮。我无法同时实现滚动,即如果我在编辑器类中调用 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;
}
}

最佳答案

查看编辑器的 update 方法,您的第一次调用是 mouseWheelUp,它将内部缓存的鼠标滚轮事件值重置为 0。在第二次调用 mouseWheelDown 该值将为 0,因此该方法的返回结果始终为 false。

您应该以不同的方式处理该问题。例如,您可以引入某种映射到表示鼠标滚轮向上或向下事件的常量或枚举。或者您可以在更新方法中处理原始传入事件值。这可能是更好的方法,因为它显然是一个增量值,根据您旋转鼠标滚轮的程度,它可能或多或少变大。在对缩放值进行更大或更小的更改时,您应该考虑增量。

关于c++ - 鼠标滚轮只能向上或向下滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21799069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com