【发布时间】:2011-02-04 18:54:41
【问题描述】:
对于 Windows 环境窗口 HWND,如何获取鼠标在该窗口上单击的坐标?
编辑:抱歉含糊不清。我有一个 HWND 对象,我正在对其进行一些图像分析。我希望能够单击 HWND 对象中显示的图像上的一个点并打印出我单击的 x、y 坐标,以及 x 和 y 坐标处图像的一些属性
【问题讨论】:
对于 Windows 环境窗口 HWND,如何获取鼠标在该窗口上单击的坐标?
编辑:抱歉含糊不清。我有一个 HWND 对象,我正在对其进行一些图像分析。我希望能够单击 HWND 对象中显示的图像上的一个点并打印出我单击的 x、y 坐标,以及 x 和 y 坐标处图像的一些属性
【问题讨论】:
函数ScreenToClient 和ClientToScreen 在屏幕坐标系和客户端坐标系之间转换。鼠标消息以客户端相对坐标传递到窗口。
但是,您的问题不是很清楚,所以如果我没有提供您正在寻找的答案,请编辑您的问题以准确解释您在寻找什么。
【讨论】:
David Heffernan 已经给出了基本答案。为了更完整,这是完整的过程:
每个窗口都有一个唯一的HWND,它是一个内部数据结构的句柄。除其他外,该结构包含一个指向WindowProc(窗口过程)的函数指针。这个窗口过程负责处理WM_LBUTTONUP等消息。每个窗口消息都有两个关联的参数,历史上称为lparam 和wparam。 WM_LBUTTONUP 的 lparam 参数包含您想要的 x 和 y 坐标。您可以通过GET_X_LPARAM(lparam) 和GET_Y_LPARAM(lparam) 检索它们
Windows 支持为单个HWND 链接多个WindowProc。这被称为"subclassing"
【讨论】: