■No69912 (らうむ さん) に返信
> ウィンドウがアクティブにならないと反応しない
> という仕様なのか?と想像しているのですが。
アクティブにした後、クリックを無かったことにする仕様です。
いわゆる MA_ACTIVATEANDEAT ですね。
> ボタンコントロールでも1発で反応してくれるようにならないものでしょうか。
そういう動作となるよう、ToolStrip を作り変えてみました。
public class RaumToolStrip : ToolStrip
{
protected const int WM_MOUSEACTIVATE = 0x0021;
/// <summary>ウィンドウをアクティブにし、マウスのメッセージを破棄しません。</summary>
protected const int MA_ACTIVATE = 1;
/// <summary>ウィンドウをアクティブにし、マウスメッセージを破棄します。</summary>
protected const int MA_ACTIVATEANDEAT = 2;
/// <summary>ウィンドウをアクティブにせず、マウスのメッセージを破棄しません。</summary>
protected const int MA_NOACTIVATE = 3;
/// <summary>ウィンドウをアクティブにせず、マウスメッセージを破棄します。</summary>
protected const int MA_NOACTIVATEANDEAT = 4;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_MOUSEACTIVATE && m.Result == (IntPtr)MA_ACTIVATEANDEAT)
{
//m.Result = (IntPtr)MA_ACTIVATE;
m.Result = (IntPtr)MA_NOACTIVATE;
}
}
}
プロパティで切り替えられるようにしておいても良いかも。
|