6

私のプログラムでは、WndProc オーバーライドを使用して、フォームのサイズ変更を停止しています。つまり、ポインターをフォームの端に移動しても、カーソルはそこにあります。

このカーソルを非表示にする方法はありますか?

4

3 に答える 3

8

FormBorderStyle代わりにプロパティを適切に設定してみませんか? その後、どちらも使用する必要はありませんWndProc

デモ用のサンプル コードを次に示します。ボタンをクリックして、フォームのサイズを変更できるかどうかを切り替えます。

using System;
using System.Windows.Forms;
using System.Drawing;

class Test
{   
    [STAThread]
    static void Main(string[] args)
    {
        Button button = new Button 
        {
            Text = "Toggle border",
            AutoSize = true,
            Location = new Point(20, 20)
        };
        Form form = new Form
        {
            Size = new Size (200, 200),
            Controls = { button },
            FormBorderStyle = FormBorderStyle.Fixed3D
        };
        button.Click += ToggleBorder;
        Application.Run(form);
    }

    static void ToggleBorder(object sender, EventArgs e)
    {
        Form form = ((Control)sender).FindForm();
        form.FormBorderStyle = form.FormBorderStyle == FormBorderStyle.Fixed3D
            ? FormBorderStyle.Sizable : FormBorderStyle.Fixed3D;
    }
}
于 2009-05-30T18:35:59.500 に答える
7

Lasse が私に送ってくれたリンクのおかげで、WndProc を使用する方法を見つけました。ジョンさん、返信ありがとうございます。私がどのようにそれをしたか知りたい人のために、私はこれを使用しました:

    protected override void WndProc(ref Message m)
    {
        const int WM_NCHITTEST = 0x0084;

        switch (m.Msg)
        {
            case WM_NCHITTEST:
                return;
        }

        base.WndProc(ref m);
    }

私はそれを徹底的にテストしていないので、副作用があるかどうかはわかりませんが、現時点ではうまく機能します:)。

于 2009-05-30T19:05:28.223 に答える
0

これには FormBorderStyle を設定するだけで十分です。なぜこれに WndProc を使用しているのですか?

于 2009-05-30T19:10:18.617 に答える