- 題名: フォーム上のマウス座標(GetCursorPos)
- 日時: 2010/01/20 11:56:57
- ID: 26279
- この記事の返信元:
- (なし)
- この記事への返信:
- [26280] Re[1]: フォーム上のマウス座標(GetCursorPos)2010/01/20 12:15:55
- [26289] Re[1]: フォーム上のマウス座標(GetCursorPos)2010/01/20 13:10:48
- ツリーを表示
■No26279に返信(遊零さんの記事) > VB.NET 2005でGetCursorPosを用いて、 > フォーム座標を常に取得する記述をしたいのですが、 フォームの位置そのものなら、Me.Location 等で取得できますし、 マウスカーソルの座標なら、GetCursorPos API を用いずとも、 Cursor.Position プロパティで取得できますよ。 Me.Label1.Text = Cursor.Position.ToString() http://www.atmarkit.co.jp/fdotnet/dotnettips/377screentoclient/screentoclient.html > スクリーン座標からの変換方法が分かりません。 > (Me.PointToClient(Windows.Forms.Cursor.Position)をどこかに適当に入れればいいと楽観してたんですが・・・) あれ? Cursor.Position を使う方法も御存知なのですね…。 何に困っているのか良く分からないのですが、API を使わないなら Me.Label1.Text = Me.PointToClient(Cursor.Position).ToString() で、API を使うのであれば Dim pt As System.Drawing.Point pt = Me.PointToClient(New System.Drawing.Point(lpPoint.X, lpPoint.Y)) Me.Label1.Text = pt.ToString() といった感じだと思います。 PointToClient の箇所も API にするなら、 GetCursorPos(lpPoint) ScreenToClient(Me.Handle, lpPoint) Me.Label1.Text = String.Format("X:{0} Y:{1}", lpPoint.X, lpPoint.Y) Private Declare Function ScreenToClient Lib "user32" _ (ByVal hWnd As IntPtr, ByRef pt As POINT) _ As <MarshalAs(UnmanagedType.Bool)> Boolean とか。
分類:[.NET]
皆さんお疲れ様です。
質問側ばかりですいませんが、またお世話になります。
VB.NET 2005でGetCursorPosを用いて、
フォーム座標を常に取得する記述をしたいのですが、
スクリーン座標からの変換方法が分かりません。
(Me.PointToClient(Windows.Forms.Cursor.Position)をどこかに適当に入れればいいと楽観してたんですが・・・)
コードは「主婦と .NET と犬の記録」さんのところからそのままいただきました。
http://naoko.wankuma.com/win32api/win32api_0007_GetCursorPos.html
Imports System.Runtime.InteropServices
''' <summary>
''' GetCursorPos(user32.dll)
''' </summary>
Partial Public Class F0007_GetCursorPos
''' <summary>
''' GetCursorPos(マウスの座標を取得)の宣言
''' </summary>
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function GetCursorPos(ByRef lpPoint As POINT) _
As Boolean
End Function
''' <summary>
''' POINT 構造体
''' </summary>
Private Structure POINT
Public X As Integer
Public Y As Integer
End Structure
''' <summary>
''' ロード時のイベント
''' </summary>
Private Sub F0007_GetCursorPos_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Text = "F0007_GetCursorPos"
Me.Label1.Text = ""
Me.Timer1.Interval = 100
Me.Timer1.Start()
End Sub
''' <summary>
''' 指定したタイマの間隔が経過した時のイベント
''' </summary>
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim lpPoint As POINT
GetCursorPos(lpPoint)
Me.Label1.Text = "X:" + lpPoint.X.ToString() + " Y:" + lpPoint.Y.ToString()
End Sub
End Class
よろしくお願いします。