人気ブログランキング | 話題のタグを見る
(VB.Net)マウスカーソルで任意の画像を使う
.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にはやられますな。
by jehoshaphat | 2008-12-03 00:22 | .Net開発


<< (.Net)テキストファイルに... (VB.Net)DataGri... >>