マウスポインタの位置

タグの編集
投稿者 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
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/10/17 19:00:58
アイコン(.ico)形式ではなく、カーソル(.cur)形式のファイルを指定する必要があります。
.ico ではホットスポットを指定できませんので、常に左上が原点になってしまいます。

https://msdn.microsoft.com/ja-jp/library/0b1674x8.aspx


Public Class Form1
    Private Declare Unicode Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileW" (lpFileName As StringAs 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/18 09:06:09
魔界の仮面弁士 さま、ご回答ありがとうございました。

>.ico ではホットスポットを指定できませんので、常に左上が原点になってしまいます。
 原点とホットスポットが同じとしたらマウスポインタの位置が返されるのは左上ということで
 理解しましたが、私の現状は、左上より少し右斜め下の値が返されるようです。

 ただ、ホットスポットの関係とのことで、むつかしそうですが .CUS への変換または作成に
 チャレンジしてみます。

 ありがとうございました。今後ともよろしくお願いいたします。