web-dev-qa-db-ja.com

Windowsフォームアプリケーションで作業するときにマウスカーソルをカスタムカーソルに変更する方法

UserControlで、マウスカーソルを矢印から手のアイコンに変更します。
私が現在していることはこれです:

this.Cursor = Cursors.Hand;

これは非常に便利です。次のようなマウスカーソルが表示されます。

enter image description here

しかし、ここに私の問題が来ます...これは人差し指で手を示しています。
必要なのは、「つかむ」手です。これは次のようなものです。

enter image description here

これを行う方法、アイコンファイル(.ico)、カーソルファイル(.cur)、またはイメージファイル(.png)を読み込み、マウスカーソルとして使用するにはどうすればよいですか?

37
Bart Gijssens

カーソルファイルがある場合:

Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;

それ以外の場合は、作成する必要があります。

カスタムカーソル に関する詳細情報

19
fixagon

System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name);を試しましたか?

2
Djole

WinForms Cursorクラスでカスタムカーソルを使用する場合の注意点は、ストリーム、ファイル名、およびリソースコンストラクターのオーバーロードを使用する場合、提供される.curファイルは白黒でなければならないということです。

.curファイルに白黒以外の色が含まれている場合、これは機能しません。

Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;

Windowsハンドルコンストラクターオーバーロードを使用して、この制限を回避する方法があります。

Windows APIを使用してハンドルを作成します。

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(string fileName);

次に、次のように適切なCursorコンストラクターに渡します。

IntPtr handle = LoadCursorFromFile("myCursor.cur");
Cursor myCursor = new Cursor(handle);
myControl.Cursor = myCursor;

これにより、他のArgumentExceptionコンストラクターが色を含むImage format is not valid. The image file may be corrupted.ファイルでオーバーロードしているときに、他の人がCursorに頭を引っ掻いて、.curをスローすることを防ぐことができます。

1
Derek W

この方法をテストしました。大丈夫です。これは私の適用です:

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    public static extern IntPtr LoadCursorFromFile(string fileName);
    Cursor myCursor;
    private void tsbtn_ZoomIn_Click(object sender, EventArgs e)
    {
        IntPtr handle = LoadCursorFromFile("view_zoom_in.cur");
        myCursor = new Cursor(handle);
        zg1.Cursor = myCursor;
    }
0
nult2003