Событие 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.
Любые советы о том, почему это происходит на одном компьютере, а не на другом?