私のプログラムでは、WndProc オーバーライドを使用して、フォームのサイズ変更を停止しています。つまり、ポインターをフォームの端に移動しても、カーソルはそこにあります。
このカーソルを非表示にする方法はありますか?
私のプログラムでは、WndProc オーバーライドを使用して、フォームのサイズ変更を停止しています。つまり、ポインターをフォームの端に移動しても、カーソルはそこにあります。
このカーソルを非表示にする方法はありますか?
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;
}
}
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);
}
私はそれを徹底的にテストしていないので、副作用があるかどうかはわかりませんが、現時点ではうまく機能します:)。
これには FormBorderStyle を設定するだけで十分です。なぜこれに WndProc を使用しているのですか?