【C#】ウィンドウをアクティブにしてメニューを開く方法

C#
この記事は約2分で読めます。

ウィンドウが非アクティブな状態でメニューをクリックしてもウィンドウがアクティブになるだけで メニューを開くことはできません。これを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クリックでメニューを開くことができます。

コメント

タイトルとURLをコピーしました