GET_WHEEL_DELTA_WPARAM macro in C#

本文关键字:in macro DELTA WHEEL GET WPARAM | 更新日期: 2023-09-27 18:24:51

如何在C#中使用GET_WEEL_DELTA_WARM宏?

GET_WHEEL_DELTA_WPARAM macro in C#

为了最大限度地清晰起见,我定义了一组函数,如下所示:

internal static class NativeMethods
{
    internal static ushort HIWORD(IntPtr dwValue)
    {
        return (ushort)((((long)dwValue) >> 0x10) & 0xffff);
    }
    internal static ushort HIWORD(uint dwValue)
    {
        return (ushort)(dwValue >> 0x10);
    }
    internal static int GET_WHEEL_DELTA_WPARAM(IntPtr wParam)
    {
        return (short)HIWORD(wParam);
    }
    internal static int GET_WHEEL_DELTA_WPARAM(uint wParam)
    {
        return (short)HIWORD(wParam);
    }
}

然后使用这样的函数,其中wParam是处理Win32 WM_MOUSEWHEELWM_MOUSEHWHEEL消息时得到的WPARAM参数:

int zDelta = NativeMethods.GET_WHEEL_DELTA_WPARAM(wParam);

您可能需要抑制溢出检查才能正常工作。为此,请更改项目设置,或将相关转换函数封装在unchecked块中。

高位字,带符号:

 ((short)(wParam>>16))

有MouseWheelEventArgs。Delta属性:

获取一个值,该值指示鼠标滚轮的更改量。

private void MouseWheelHandler(object sender, MouseWheelEventArgs e)
{
    if (e.Delta > 0)
    {
        // Do one thing
    }
    else if (e.Delta < 0)
    {
        // Do the other thing
    }
}