FC2ブログ

C#でカーソルを作成する

  • Day:2011.12.15 23:33
  • Cat:C#
C#でマウスカーソルをオリジナルの画像に変更したい場合は、
以下のようなクラスを使用します。


using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Drawing;

/// <summary>
/// カーソルを作成するクラス
/// </summary>
public class CursorCreator
{
/// <summary>
/// 指定されたアイコンまたはカーソルに関する情報を取得します
/// </summary>
/// <param name="hIcon">アイコンのハンドル</param>
/// <param name="pIconInfo">アイコンの構造体</param>
/// <returns>関数が成功すると 0 以外の値が返ります</returns>
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetIconInfo(IntPtr hIcon, ref IconInfo pIconInfo);

/// <summary>
/// 指定された ICONINFO 構造体に基づいて、1 個のアイコンまたはカーソルを作成します
/// </summary>
/// <param name="icon">アイコン情報</param>
/// <returns>関数が成功すると作成されたアイコンまたはカーソルのハンドルが返ります</returns>
[DllImport("user32.dll")]
public static extern IntPtr CreateIconIndirect(ref IconInfo icon);

/// <summary>
/// カーソルを作成する
/// </summary>
/// <param name="bitmap">ビットマップ</param>
/// <param name="xHotspot">カーソルのホットスポットの X 座標</param>
/// <param name="yHotspot">カーソルのホットスポットの Y 座標</param>
/// <returns>作成したカーソル</returns>
public static Cursor CreateCursor(Bitmap bmp, int xHotSpot, int yHotSpot)
{
IntPtr ptr = bmp.GetHicon();
IconInfo tmp = new IconInfo();
GetIconInfo(ptr, ref tmp);
tmp.xHotspot = xHotSpot;
tmp.yHotspot = yHotSpot;
tmp.fIcon = false;
ptr = CreateIconIndirect(ref tmp);
return new Cursor(ptr);
}
}

/// <summary>
/// アイコンまたはマウスカーソルに関する情報を格納する構造体
/// </summary>
public struct IconInfo
{
public bool fIcon; // アイコンの場合 true, カーソルの場合 false
public int xHotspot; // カーソルのホットスポットの X 座標
public int yHotspot; // カーソルのホットスポットの Y 座標
public IntPtr hbmMask; // 透過用のビットマップハンドル
public IntPtr hbmColor; // 画像用のビットマップハンドル
}


CursorCreatorクラスのCreateCursor関数を使用することでカーソルを作成します。
ホットスポットとは、マウスをクリックした時にクリック動作の対象となる点のことです。
通常のカーソルのホットスポットは左上隅(0,0)に設定されています。


【C#プログラミング】 画像ファイルをマウスカーソルにする - ながとダイアリー
C# Tutorial - How To Use Custom Cursors Switch on the Code

Comment

Comment Form
公開設定

Trackback


→ この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。