WPF останавливает получение события мыши - PullRequest
0 голосов
/ 29 июля 2010

В WinForms я использовал следующий блок кода, чтобы остановить фокусировку приложения при нажатии:

private const int WM_MOUSEACTIVATE = 0x0021;
private const int MA_NOACTIVATEANDEAT = 0x0004;

protected override void WndProc(ref Message m)
{
   if (m.Msg == WM_MOUSEACTIVATE)
   {
       m.Result = (IntPtr)MA_NOACTIVATEANDEAT;
       return;
   }
   base.WndProc(ref m);
}

Есть ли альтернатива этому в приложении WPF?Могу ли я использовать HwndSource?Вот что у меня есть (WM_MOUSEACTIVATE один работает не так, как требуется, и приложение все еще получает фокус):

protected override void OnSourceInitialized(EventArgs e)
    {
       base.OnSourceInitialized(e);
       HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
       source.AddHook(WndProc);
    }

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
   // Handle messages...
   int WM_MOUSEACTIVATE = 0x0021;
   int WM_LBUTTONDOWN = 0x0201; //513
   int WM_LBUTTONUP = 0x0202; //514
   int WM_LBUTTONDBLCLK = 0x0203; //515
    if (msg == WM_MOUSEACTIVATE || msg == MA_NOACTIVATEANDEAT || msg == WM_LBUTTONDOWN || msg == WM_LBUTTONUP || msg == WM_LBUTTONDBLCLK)
   {
      handled = true;
   }
   return IntPtr.Zero;
}

Как я могу получить результат сообщения?

1 Ответ

1 голос
/ 29 июля 2010

Разрешается с помощью:

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
   // Handle messages...
   int WM_MOUSEACTIVATE = 0x0021;
   if (msg == WM_MOUSEACTIVATE )
   {
      handled = true;
      return new IntPtr(MA_NOACTIVATEANDEAT); 
   }
   return IntPtr.Zero;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...