「ほっ」と。キャンペーン
(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にはやられますな。
[PR]
by jehoshaphat | 2008-12-03 00:22 | .Net開発 | Trackback | Comments(1)
トラックバックURL : http://jehupc.exblog.jp/tb/9123592
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Commented by ほたて at 2015-04-09 10:12 x
Hotspotプロパティは変更できます。
https://msdn.microsoft.com/ja-jp/library/0b1674x8.aspx
MSもちゃんと考えてると思いますよ。


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