- PR -

メインウィンドウをアクティブ化せずにメニューを開くには?

1
投稿者投稿内容
うかわ
会議室デビュー日: 2007/11/02
投稿数: 4
投稿日時: 2007-12-11 06:30
VS.NET2005で、ドッキングウィンドウ(クラスビューなど)がフローティングしていてフォーカスを持っている状態でメインウィンドウのメニューアイテムをクリックすると、メインウィンドウは非アクティブなままでメニューが開きます。
これと同様の動作を、作成中のアプリケーションで実現する必要があり、試行錯誤しています。

アプリケーションが非アクティブな場合は通常の処理を行い、既にアクティブな場合は
以下のような処理をすれば良いのではないかと考えているのですが…
 ・MenuStripを継承したクラスを作成し、クリックイベントを独自処理する。
または、
 ・メインウィンドウのアクティブ化イベントを何らかの方法でキャンセルし、クリックイベントがヒットしている子コントロールへイベントを渡す。

もっと良い実装方法やサンプルなどの情報をお持ちの方、どうかご教示いただけないでしょうか?
よろしくお願いします。

環境: VS.NET2005 C# .NET Framework2.0
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-12-11 08:27
引用:

うかわさんの書き込み (2007-12-11 06:30) より:
もっと良い実装方法やサンプルなどの情報をお持ちの方、どうかご教示いただけないでしょうか?



VBで。

コード:
Public Class NoActivateMenuStrip
    Inherits MenuStrip

    Private Const WM_MOUSEACTIVATE As Integer = &H21
    Private Const MA_ACTIVATE As Integer = 1
    Private Const MA_ACTIVATEANDEAT As Integer = 2
    Private Const MA_NOACTIVATE As Integer = 3
    Private Const MA_NOACTIVATEANDEAT As Integer = 4

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        If m.Msg = WM_MOUSEACTIVATE AndAlso Not DesignMode Then
            m.Result = New IntPtr(MA_NOACTIVATE)
            Return
        End If
        MyBase.WndProc(m)
    End Sub

End Class

うかわ
会議室デビュー日: 2007/11/02
投稿数: 4
投稿日時: 2007-12-11 14:24
れいさん、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)