Макрос GET_WHEEL_DELTA_WPARAM в C # - PullRequest
       27

Макрос GET_WHEEL_DELTA_WPARAM в C #

4 голосов
/ 16 февраля 2012

Как мне использовать макрос GET_WHEEL_DELTA_WPARAM в C #?

Ответы [ 3 ]

7 голосов
/ 16 февраля 2012

Для максимальной ясности я бы определил набор функций следующим образом:

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 - это параметр WPARAM, полученный при обработке сообщений Win32 WM_MOUSEWHEEL или WM_MOUSEHWHEEL:

int zDelta = NativeMethods.GET_WHEEL_DELTA_WPARAM(wParam);

Возможно, вам придется подавить проверку переполнения, чтобы это работало правильно. Для этого либо измените настройки своего проекта, либо поместите соответствующие функции преобразования в unchecked блок .

2 голосов
/ 16 февраля 2012

старшее слово со знаком:

 ((short)(wParam>>16))
1 голос
/ 16 февраля 2012

Это свойство 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
    }
}
...