マウスポインタの位置 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 N88-BASIC  (社会人) 投稿日時 2017/10/18 09:06:09
魔界の仮面弁士 さま、ご回答ありがとうございました。

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

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

 ありがとうございました。今後ともよろしくお願いいたします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 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/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