鼠标滚轮只能向上或向下滚动
mouse wheel only can scroll either up or down
目前我正在开发一个可以放大和缩小的游戏编辑器。有一个问题,我可以向上或向下滚动鼠标滚轮。我无法同时实现滚动,即如果我在编辑器类中调用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。
您应该以不同的方式处理该问题。例如,您可以引入某种映射到表示鼠标滚轮向上或向下事件的常量或枚举。或者,您可以在更新方法中处理原始传入事件值。这可能是更好的方法,因为它显然是一个增量值,可能或多或少地大,具体取决于您旋转鼠标滚轮的程度。在对缩放值进行更大或更小的更改时,应考虑增量。
case WM_MOUSEWHEEL:
if ((short)HIWORD(msg.wParam) < 0)
{
zoom-=3;
}
else
{
zoom+=3;
}
break;
使用鼠标滚轮滚动的示例,简单流畅。
相关文章:
- 使用一个考虑到std::map中键值的滚动或换行的键
- WinAPI挂钩鼠标
- QScrollArea:由垂直滚动条引起的水平滚动条
- 将鼠标悬停在问题上时与预期">"相关的代码错误
- 跟踪滚动条上的鼠标事件
- 我在QChartView中找不到缩放图形的鼠标滚轮滚动事件
- 使用鼠标滚轮平滑地滚动QTableWidget
- 鼠标滚动滚动滚动
- OpenCV 鼠标事件始终在鼠标滚动时接收事件 10 和 *flag* 0
- 发生鼠标滚动事件时如何响应
- 鼠标滚轮只能向上或向下滚动
- 富编辑控件中的鼠标滚轮滚动滞后/缓慢.如何解决此问题
- 如何接收 QGraphicsView 的滚动条鼠标事件
- 使QSliders忽略鼠标滚轮/滚动
- 如何模拟当前打开窗口的鼠标滚动
- 如何获得鼠标滚轮垂直滚动速率
- 如何在c++ opengl中使用鼠标滚动对象
- 删除鼠标滚轮QGraphics视图上的滚动功能
- 阻止控件的鼠标滚轮滚动
- 捕捉全局鼠标滚动,并向应用程序发送自定义鼠标滚动事件