2010-07-29 6 views
0

Dans WinForms j'ai utilisé le bloc de code suivant pour arrêter l'application gagnant attention en étant cliqué sur:souris d'arrêt WPF bas événement gagnant de mise au point d'application

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); 
} 

est-il une alternative à cela dans une application WPF? Puis-je utiliser un HwndSource? Voici ce que j'ai jusqu'à présent (WM_MOUSEACTIVATE ne fonctionne pas seul au besoin, et l'application se concentrer encore):

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; 
} 

Comment puis-je obtenir le résultat du message?

Répondre

1

résolu en utilisant:

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; 
} 
+0

Lorsque MA_NOACTIVATEANDEAT = 4 [source] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645612%28v=vs.85% 29.aspx) –