1

私の .net winform アプリケーションのタイトル バーに、他の多くのコントロールを持つ Panel コントロールを配置しました。このため、パネルをクリックしても、コンテキスト メニューやドラッグ機能が表示されません。しかし、タイトルバーのパネルの外側をクリックしても同じことが表示されます。

PS - 明らかに、ユーザーにとっては、アプリケーションの上部にあるバー全体が「タイトル バー」として知られており、タイトル バーのどこにでもドラッグ アンド コンテキスト メニューが必要です (ユーザーにとっては、パネルも含まれます)。

これを達成する方法はありますか。パネルまたはパネル内の任意のコントロールを右クリックしたときにコンテキスト メニューが表示されるようにします。また、パネルまたはパネル内のコントロールをクリックしてドラッグしようとすると、アプリケーションウィンドウ全体をドラッグしたいと考えています。

どんな種類の助けにも感謝します。ありがとう!

4

1 に答える 1

2

WndProc「通常の」タイトル バーと同じように、メッセージを にトンネリングする必要があります。

これを宣言します。

private const int WM_SYSCOMMAND = 0x112;
private const int SC_MOUSEMOVE = 0xf012;
private const int SC_MOUSEMENU = 0xf090;

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg,
    IntPtr wParam, IntPtr lParam);

次に、Panel MouseDownハンドラーで左クリックに対して次のようにします。

SendMessage(Handle, WM_SYSCOMMAND, new IntPtr(SC_MOUSEMOVE), IntPtr.Zero);

そして、これは右クリック用です:

SendMessage(Handle, WM_SYSCOMMAND, new IntPtr(SC_MOUSEMENU), IntPtr.Zero);
于 2012-05-24T13:03:39.020 に答える