Событие Mouse Wheel не срабатывает на одном компьютере, работает на другом

Вот проблема:

Я написал приложение WPF, которое использует Hwnd для размещения поверхности рисования. Этот hwnd отвечает за отправку событий мыши, которые происходят. На моем компьютере все работает нормально, и я вижу сообщение колеса мыши 522(0x020A) без проблем.

Я установил это же программное обеспечение на другом компьютере, и событие не сработало. Я зашел так далеко, что записал все сообщения о событиях в файл, чтобы узнать, сработал ли вообще 522, и он так и не появился.

Вещи, которые я пробовал:

-Убедясь, что у Hwnd есть фокус. Мало того, что я сделал поток, который перефокусировал бы его каждую секунду, я удостоверился, что на моем компьютере (работающем) "IsFocused" был верен для этого hwnd.

- Завершение работы любой другой программы. Это включало в себя обычные вещи для компьютера, работающего в фоновом режиме, в случае, если что-то отвлекало внимание.

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

Вот базовый код:

public abstract class Win32HwndControl : HwndHost
{
    protected IntPtr Hwnd { get; private set; }
    protected bool HwndInitialized { get; private set; }

    private const string WindowClass = "HwndWrapper";

    protected Win32HwndControl()
    {
    }

protected override HandleRef BuildWindowCore(HandleRef hwndParent)
{
    var wndClass = new NativeMethods.WndClassEx();
    wndClass.cbSize = (uint)Marshal.SizeOf(wndClass);
    wndClass.hInstance = NativeMethods.GetModuleHandle(null);
    wndClass.lpfnWndProc = NativeMethods.DefaultWindowProc;
    wndClass.lpszClassName = WindowClass;
    wndClass.hCursor = NativeMethods.LoadCursor(IntPtr.Zero, NativeMethods.IDC_ARROW);
    NativeMethods.RegisterClassEx(ref wndClass);

    Hwnd = NativeMethods.CreateWindowEx(
            0, WindowClass, "", NativeMethods.WS_CHILD | NativeMethods.WS_VISIBLE,
            0, 0, (int)Width, (int)Height, hwndParent.Handle, IntPtr.Zero, IntPtr.Zero, 0);

    return new HandleRef(this, Hwnd);
 }

 protected override IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        switch (msg)
        {
            case NativeMethods.WM_LBUTTONDOWN:
                RaiseMouseEvent(MouseButton.Left, Mouse.MouseDownEvent);
                break;

            case NativeMethods.WM_LBUTTONUP:
                RaiseMouseEvent(MouseButton.Left, Mouse.MouseUpEvent);
                break;

            case NativeMethods.WM_RBUTTONDOWN:
                RaiseMouseEvent(MouseButton.Right, Mouse.MouseDownEvent);
                break;

            case NativeMethods.WM_RBUTTONUP:
                RaiseMouseEvent(MouseButton.Right, Mouse.MouseUpEvent);
                break;
            case NativeMethods.WM_MOUSEWHEEL:
                RaiseMouseWheelEvent(wParam.ToInt32(), Mouse.MouseWheelEvent);
                break;

        }

        return base.WndProc(hwnd, msg, wParam, lParam, ref handled);
    }

В этот класс добавлено больше кода, но я подтвердил, что он не использует метод WndProc.

Любые советы о том, почему это происходит на одном компьютере, а не на другом?

0 ответов

Другие вопросы по тегам