マウスカーソルの指定

タグの編集
投稿者 N88-BASIC  (社会人) 投稿日時 2018/4/1 18:30:38
Windows 10(1709)+Visual Basic 2017 にてプログラムを作成しております。


以前同様の問い合わせをさせでアドバイスをいただいておりましたが、紆余曲折をへてVS2017にてCUSファイルを作成し、リソースに登録して利用したいと考えております。

リソースとしてCUSファイルを登録していますが、マウスカーソルをリソースから設定する方法が見つかりません。方法をご存知でしたらご教授ください。

現状のイメージは

1)リソースへ 作成した mycus.cus をファイルとして登録

2) cursor = new cursor(My.Resouces.mycus .. <=このような形で設定できないかと考えております)

 ※ICOファイルの時はHANDLEを使用して設定できたと思うのですが、CUSではHANDLEが無いようです(恥ずかしながらこの辺は全く理解できておりません)。

以上 よろしくお願いします。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/4/2 11:38:25
> VS2017にてCUSファイルを作成し、リソースに登録して利用したいと考えております。
.cur (Windows カーソルファイル)ではなく、
.CUS (AutoCAD ユーザ辞書ファイル)ですか…?

ちなみに正しいカーソルファイルなら、ファイルの先頭 4 バイトは
00, 00, 02, 00 であるはずです。


> 2) cursor = new cursor(My.Resouces.mycus .. <=このような形で設定できないかと考えております)
そのリソースが、Windows カーソル ファイルを表す Byte 配列を返すものであれば
 Cursor = New Cursor(New System.IO.MemoryStream(My.Resources.何某))
のようにすればセットできます。

ただし指定できるカーソルはモノクロに限定されますのでご注意ください。
(カラーカーソルを指定しても、白黒カーソルで描画されます)

https://msdn.microsoft.com/ja-jp/library/system.windows.forms.cursor%28vs.100%29.aspx
》 Cursor クラスでは、アニメーション カーソル (.ani ファイル)、
》 またはカラーのカーソルはサポートされていません。


カラーカーソルや指定したいなら、LoadImage API を用いるか、もしくは、
アイコン形式(.ico)で代用するしかありません。
 Cursor = New Cursor(My.Resources.アイコンリソース.Handle)

ただし Icon 形式でセットした場合は、ホットスポットが画像の中央になりますし、
反転部色の指定などもできません。また、アニメーションカーソルも使えません。



> CUSではHANDLEが無いようです(恥ずかしながらこの辺は全く理解できておりません)。

正攻法で .cur ファイルを扱うのであれば、LoadImage API を使って
アイコンハンドルを得ることになります。この場合、不要になった時点で、
Cursor オブジェクトの Dispose メソッドを呼ぶ作業と、
DestroyCursor API でアイコンハンドルを破棄する作業が必要になります。
投稿者 N88-BASIC  (社会人) 投稿日時 2018/4/3 09:04:09
魔界の仮面弁士さま、ご回答ありがとうございます。

質問の対象が「Windowsのカーソルファイル」でいたので、ご教授いただいた”Cursor = New Cursor(New System.IO.MemoryStream(My.Resources.何某))”で実現できました。

この形式のファイルは IDE 上で直接追加・修正できるし、ファイルサイズが小さいので助かっています。
その他の形式は今後の課題となるかと思います。

直線や曲線を作図するアプリにチャレンジしているのですが見栄えが良くなり助かります(絵心は不足していますが、、)

今後ともよろしくお願いいたします。