ウィンドウが非アクティブな状態でメニューをクリックしてもウィンドウがアクティブになるだけで メニューを開くことはできません。これを1クリックでウィンドウをアクティブにしてメニューを開く方法です。
サンプルソース
非アクティブウィンドウ上でマウスが押された場合、ウィンドウをアクティブにしてメニューを開きます。
using System;
using System.Windows.Forms;
namespace Test {
/// <summary>
/// ウィンドウをアクティブにしてメニューを開くサンプル
/// </summary>
class MenuStripEx : MenuStrip {
private const int WM_MOUSEACTIVATE = 0x21;
private const int MA_ACTIVATE = 1;
/// <summary>
/// WndProc
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m) {
// 非アクティブウィンドウ上でマウスが押された場合
if (m.Msg == WM_MOUSEACTIVATE) {
// ウィンドウをアクティブ化
m.Result = new IntPtr(MA_ACTIVATE);
return;
}
base.WndProc(ref m);
}
}
}
おわりに
メニューバー(MenuStrip)以外にもツールバー(ToolStrip)、ステータスバー(StatusStrip)も同様の修正で1クリックでメニューを開くことができます。
コメント