0

何らかの理由で、ユーザーが実際に X ボタンをクリックしたことを検出する必要があります。私がこれまでに持っているのはこれです:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == (int)0xa1) //WM_NCLBUTTONDOWN
        {
            Point p = new Point((int)m.LParam);
            p = this.PointToClient(p);
            if (p.X > 680)
            {
                //do what I need to do...
            }
        }

        base.WndProc(ref m);
    }

基本的に、ウィンドウの非クライアント領域でのマウスクリックである「WM_NCLBUTTONDOWN」メッセージを探します。次に、LParam から X 座標と Y 座標を取得し、最後にそれを画面座標に変換します。したがって、この時点で、ユーザーが非クライアント領域をクリックしたことがわかり、フォームのどこにあるかがわかります。

私の質問は、これらの座標が X ボタン上にあるかどうかをどのように確認できるかです。今のところ、私は 680 をハードコーディングしています。これは、ウィンドウの現在のサイズで機能するためです (サイズは大きくありません)。オプション。さらに、Y 座標のコーディングすらしていないため、誰かがウィンドウの右端をクリックすると、そのコードもトリガーされます。それで...誰かアイデアはありますか?

4

2 に答える 2

3

OK ボタンとキャンセル ボタンがあるとします。これらのボタンの 1 つがクリックされたときに値を設定してみませんか。次に、フォームの Closing イベントで、この値が設定されていない場合、X ボタンがクリックされたことがわかります。私が知らないフォームを閉じる他の方法がない限り...

編集:

グローバルブール値を使用する代わりに、ボタンのクリック時にフォームの DialogResult プロパティを変更できます。X ボタンをクリックしたときの DialogResult の値はわかりませんが、試してみる必要があります。

于 2009-05-28T14:33:12.333 に答える
0

マウスが閉じるボタンの上にあるときに通知するWM_NCHITTESTメッセージをテストする場合。

于 2009-05-28T14:45:37.647 に答える