2011-08-09 6 views
0

テキストボックスからWM_MOUSELEAVEメッセージを取り消す方法はありますか?テキストボックスからMouseLeaveメッセージを取り消す

私はそれの上に別のコントロールを直接持っています(私はWindows描画の境界線を取得しようとしています)。私は手動でそのコントロールのMouseMoveイベントでWM_MOUSEMOVEを呼び出して、テキストボックスの周りにエアロブルーの境界線が点灯するようにしています。 Spy ++を使用すると、私はまだその境界にいるにもかかわらず、その発砲WM_MOUSELEAVEを見る。そのため、青い枠線がちらつきで消える/再表示されます。

編集私は@ジェローンの答えを試してみましたが、ちらつきを軽減しましたが、まだ輝きを保つことができない、または長すぎます。

 if (m.Msg == (int)Win32Api.WindowsMessages.MouseLeave) 
     { 
      var mousePosition = PointToClient(MousePosition); 
      if (mousePosition.X < 0 || mousePosition.X > Width || 
       mousePosition.Y < 0 || mousePosition.Y > Height) 
       base.WndProc(ref m); 
      return; 
     } 

     base.WndProc(ref m); 
+0

あなたはmessageloop(WndProc)にフックしましたか? – Jeroen

+0

コントロールのフォーカスを設定しても同じ効果が得られますか? – Mehran

+0

@Mehran - 私はすでに焦点を設定しました。これは、ユーザーがテキストボックスの上を移動しても、フォーカスを合わせないときです。 –

答えて

1

多分これはあなたが探しているものです。 TextBoxの定義をtbに置き換える必要がありますが、もっとエレガントな方法があります。

public class tb : TextBox 
      { 

       private const int WM_MOUSELEAVE = 0x02A3; 

       protected override void WndProc(ref Message m) 
       { 
        if (m.Msg == WM_MOUSELEAVE) 
        { 
         // not passing the message on, so does nothing. 
         // handle it yourself here or leave empty. 
        } 
        else 
        { 
         // otherwise let windows handle the message 
         base.WndProc(ref m); 
        } 
       } 
      } 
+0

私は自分の質問を更新しました。 –

関連する問題