.Netで任意の画像をマウスカーソルとして扱いたい場合です。
簡単にできるかと思ったら、結構はまりました。
まず、カーソルファイルを作ります。
そのカーソルファイルをプロジェクトに追加して、ビルド時に出力するようします。
ソースは下記のようにすることで、カーソルファイルを読み込み、マウスカーソルを設定できます。
Me.Cursor = New Cursor("Original.cur")
ところが、これで実行するとカーソルが白黒になってしまいます。
(ちなみに、正しいカーソルファイルフォーマットでないと「イメージの形式が有効ではありません。イメージ ファイルが壊れている可能性があります。 パラメータ名: stream」という例外が発生してしまいます。)
MSDNは「メモ Cursor クラスでは、アニメーション カーソル (.ani ファイル) はサポートされません。」とありますが、どうやらカラーカーソルもサポートされてないようです。
そのことがスレッド: VB.NETでのマウスカーソルの色についてや色付きのカーソルを作成するにも取り上げられています。
で、対応策は上記のサイトにもあるように、アイコンファイルをいったん取り込んで、そのハンドルをCursorを作ります。
Dim ico As New Icon("アイコンファイル.ico") 'アイコンファイルのハンドルからCursor作成 Dim cur As New Cursor(ico.Handle) Me.Cursor = cur
ちなみにアイコンをリソースとして取り込んでいるとこんな感じでできます。(アイコンリソース名を"Cursor_Mouse"とします)
Me.Cursor = New Cursor(My.Resources.Cursor_Mouse.Handle)
で、ここでも問題が。
IconオブジェクトからCursorを作るとホットスポット(Windows がカーソルの位置を追跡するときに参照するポイント)がイメージの中心点になってしまいます。
ホットスポットの変更はどうやらできないみたいなので、仕方なく最初32x32で作ってたイメージを64x64にし、画像を右下に移動させ、あとはすべて透過にするという荒技で対処しました。
まったく、MSにはやられますな。