ずっと前にVisual Basic .netで作ったソフトで、カーソルを変えようと思ったら、なぜかカラーのカーソルが白黒2色でしか表示されなかった。
きっとこれは.net Frameworkのバグだと思って、バージョンアップを待ったのだが、Visual Basic 2005 Express Edition(無償で商用利用可。すばらしい。)に添付のヘルプで「Cursorクラスについて」を見たところ・・・
Cursor クラスでは、アニメーション カーソル (.ani ファイル)、またはカラーのカーソルはサポートされていません。
おいっ!仕様にするなよっ!
・・・ということで、Microsoftには期待できそうもないので、色々と調べてみたら、Win32API使えばできそう、というのがわかり、ためしてみたら行けました。以下、カーソルのファイル名を指定して、Cursorクラスのインスタンスを返す関数(適当に例外処理とか追加してください)。
Declare Function LoadImage Lib "user32" _
Alias "LoadImageA" (ByVal hInst As Integer, _
ByVal lpsz As String, ByVal un1 As Integer, _
ByVal n1 As Integer, ByVal n2 As Integer, _
ByVal un2 As Integer) As Integer
Function LoadCursor(ByVal CursorFilePath As String)
Dim ip As New System.IntPtr( _
LoadImage(vbNullString, CursorFilePath, _
2, 0, 0, &H10))
Return New Cursor(ip)
End Sub
これをコピペして、Me.Cursor = LoadCursor("C:\test.cur")のように使って下さい(なんて投げやりな解説)。
しかし、Win32APIでできることは、.net Frameworkでもなんらかのかたちで実現できて欲しいです・・・。
なお、今回LoadImageの使い方について、WinAPI Database for VB ProgrammerのLoadImageの項を参照しました。VB.NETでの宣言まで載ってて、えらい便利です。