マウスポインタの位置 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2017/10/17 19:00:58
アイコン(.ico)形式ではなく、カーソル(.cur)形式のファイルを指定する必要があります。
.ico ではホットスポットを指定できませんので、常に左上が原点になってしまいます。
https://msdn.microsoft.com/ja-jp/library/0b1674x8.aspx
.ico ではホットスポットを指定できませんので、常に左上が原点になってしまいます。
https://msdn.microsoft.com/ja-jp/library/0b1674x8.aspx
Public Class Form1
Private Declare Unicode Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileW" (lpFileName As String) As IntPtr
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'モノクロカーソルの場合
Button1.Cursor = New Cursor("C:\Windows\Cursors\lwe.cur")
'カラーカーソルの場合
Button2.Cursor = New Cursor(LoadCursorFromFile("C:\Windows\Cursors\aero_pen_xl.cur"))
'アニメーションカーソルの場合
Button3.Cursor = New Cursor(LoadCursorFromFile("C:\Windows\Cursors\aero_working_xl.ani"))
End Sub
End Class
投稿者 N88-BASIC  (社会人)
投稿日時
2017/10/17 17:11:22
Windows 10 (Ver 1703) + Visual Basic 2017 にてマウスカーソルを独自に作成したアイコンファイルを設定して、マウスポインタを位置を取得する処理を行っております。
この時に取得されるマウスポインタの位置がマウスポインタの左上の位置ではなくマウスポインタ(サイズ)の中央となっているようです。当然、マウスの挙動もマウスポインタの中央を基準にされているようです。
マウスポインタの挙動が左上(位置情報も含めて)となるようにする方法をご教授いただければ幸いです。
・アイコンの作成は Dobon ネットさんを参照させていただきました。
・実際のアイコンの設定はプロジェクトのリーソスに登録したものを参照しています。
以上 よろしくお願いします。
------------------------- 以下がコードの概要です ----------------------------
Dim MyCus As Cursor = New Cursor("MyIcon.ico")
Cursor = MyCus
~~~
Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseClick
TextBox1.text=e.Location.X.ToString("X=#0") + e.Location.Y.ToString(" Y=#0")
End Sub
この時に取得されるマウスポインタの位置がマウスポインタの左上の位置ではなくマウスポインタ(サイズ)の中央となっているようです。当然、マウスの挙動もマウスポインタの中央を基準にされているようです。
マウスポインタの挙動が左上(位置情報も含めて)となるようにする方法をご教授いただければ幸いです。
・アイコンの作成は Dobon ネットさんを参照させていただきました。
・実際のアイコンの設定はプロジェクトのリーソスに登録したものを参照しています。
以上 よろしくお願いします。
------------------------- 以下がコードの概要です ----------------------------
Dim MyCus As Cursor = New Cursor("MyIcon.ico")
Cursor = MyCus
~~~
Private Sub PictureBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseClick
TextBox1.text=e.Location.X.ToString("X=#0") + e.Location.Y.ToString(" Y=#0")
End Sub
>.ico ではホットスポットを指定できませんので、常に左上が原点になってしまいます。
原点とホットスポットが同じとしたらマウスポインタの位置が返されるのは左上ということで
理解しましたが、私の現状は、左上より少し右斜め下の値が返されるようです。
ただ、ホットスポットの関係とのことで、むつかしそうですが .CUS への変換または作成に
チャレンジしてみます。
ありがとうございました。今後ともよろしくお願いいたします。