- PR -

タイトルバーをダブルクリック(C#)

投稿者投稿内容
563LE
会議室デビュー日: 2005/09/30
投稿数: 4
投稿日時: 2005-09-30 19:34
お世話になります。563LEと申します。

C#でフォームのタイトルバーをダブルクリックしたときに、最大、最小化されないようにしたいです。
FormBorderStyleは、Sizableで可能にしたいです。
StandardDoubleClickを試したのですが、効果がないです。

どなたか方法をご存知の方、アドバイスいただけないでしょうか?
宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-30 19:37
こんにちは、じゃんぬ です。

引用:

563LEさんの書き込み (2005-09-30 19:34) より:

C#でフォームのタイトルバーをダブルクリックしたときに、最大、最小化されないようにしたいです。
FormBorderStyleは、Sizableで可能にしたいです。
StandardDoubleClickを試したのですが、効果がないです。


普通に最大化ボタン・最小化ボタンを無効にすれば良いのでは?

  フォームの最大化ボタン・最小化ボタンを無効にする


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
563LE
会議室デビュー日: 2005/09/30
投稿数: 4
投稿日時: 2005-10-01 08:45
返信ありがとうございます。

>普通に最大化ボタン・最小化ボタンを無効にすれば良いのでは?
説明が足りなくてすみません。
最大・最小化はボタンのみで行ないたいと思っているので、最大・最小化ボタンは使用できるようにしておきたいです。

タイトルバーをダブルクリックすればタイトルバーだけの表示になり、再びダブルクリックすると元に戻るようなフリーソフトがあるので、タイトルバーのダブルクリックのイベントを変更する方法があると思うのですが、どなたかご存知でないでしょうか?

ご指導宜しくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-01 10:45
こんにちは、じゃんぬ です。

引用:

563LEさんの書き込み (2005-10-01 08:45) より:
返信ありがとうございます。

最大・最小化はボタンのみで行ないたいと思っているので、最大・最小化ボタンは使用できるようにしておきたいです。


じゃあ、WM_NCLBUTTONDBLCLK を捕捉してメッセージを止めるしかないですね。
WM_NCLBUTTONDBLCLK は、クライアント領域以外をダブルクリックしたことを示すメッセージです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
563LE
会議室デビュー日: 2005/09/30
投稿数: 4
投稿日時: 2005-10-01 15:42
返信ありがとうございます。563LEです。

WM_NCLBUTTONDBLCLKとOnNcLButtonDblClk関数を使用してみようと思ったのですが、
C#での使い方がわかりません。
ヘルプなどで調べたのですが、C#に似たような関数などを見つけられませんでした。

フォームのDubleClickのイベントなどを使ってみたのですが、タイトルバーをダブルクリックしてもイベントが発生しませんでした。

C#にWM_NCLBUTTONDBLCLKとOnNcLButtonDblClkのような関数などはあるのでしょうか?
宜しくお願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-10-01 16:44
こんにちは。

>C#にWM_NCLBUTTONDBLCLKとOnNcLButtonDblClkのような関数などはあるのでしょうか?

WndProc をオーバーライドします。
「ウィンドウメッセージ」を調べてみてください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-01 16:47
こんにちは、じゃんぬ です。

引用:

563LEさんの書き込み (2005-10-01 15:42) より:

WM_NCLBUTTONDBLCLKとOnNcLButtonDblClk関数を使用してみようと思ったのですが、


いや、後者の関数は必要ないでしょう。

先にもお話したように、WM_NCLBUTTONDBLCLK を捕捉してメッセージを止めれば良いのです。
WndProc をオーバーライドして、WM_NCLBUTTONDBLCLK を捕捉したら、
何もせずに return、それ以外は base.WndProc(m); という感じですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-01 16:53
こんにちは、じゃんぬ です。

引用:

囚人さんの書き込み (2005-10-01 16:44) より:

WndProc をオーバーライドします。


う、書いてる間に回答ついてましたか...
悔しいので、それらしいのを置いておきます。

コード:

protected override void WndProc(ref Message m)
{
    const int WM_NCLBUTTONDBLCLK = 0x00A3;

    if (m.Msg == WM_NCLBUTTONDBLCLK) {
        return;
    }

    base.WndProc(ref m);
}


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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