【问题标题】:How do you get the coordinates (with respect to a window) of a mouse click, in a Windows environment在 Windows 环境中,如何获取鼠标点击的坐标(相对于窗口)
【发布时间】:2011-02-04 18:54:41
【问题描述】:

对于 Windows 环境窗口 HWND,如何获取鼠标在该窗口上单击的坐标?

编辑:抱歉含糊不清。我有一个 HWND 对象,我正在对其进行一些图像分析。我希望能够单击 HWND 对象中显示的图像上的一个点并打印出我单击的 x、y 坐标,以及 x 和 y 坐标处图像的一些属性

【问题讨论】:

    标签: c++ windows


    【解决方案1】:

    函数ScreenToClientClientToScreen 在屏幕坐标系和客户端坐标系之间转换。鼠标消息以客户端相对坐标传递到窗口。

    但是,您的问题不是很清楚,所以如果我没有提供您正在寻找的答案,请编辑您的问题以准确解释您在寻找什么。

    【讨论】:

    • @apple 您需要处理 WM_LBUTTONDOWN 和/或 WM_LBUTTONUP 消息。当然,如果您使用的是 MFC 或 WinForms 或 VCL 或 wxWidgets 或 Qt 等,那么这些将为您包装好。你为什么不告诉我们更多。我们无法真正猜测您在做什么。语言、框架、应用类型等细节会有所帮助。
    • 这是 windows c++,如问题的标签所示。而已。一个函数更新窗口视频 WNDCLASS.lpfnWndProc。我没有使用 QT 或 wxWidgets 之类的。不过,也许我误解了你的要求
    • @apple “window video WNDCLASS.lpfnWndProc”是什么意思?你有一个带有 switch 语句的 WndProc 吗?您是否尝试过处理我提到的消息。
    【解决方案2】:

    David Heffernan 已经给出了基本答案。为了更完整,这是完整的过程:

    每个窗口都有一个唯一的HWND,它是一个内部数据结构的句柄。除其他外,该结构包含一个指向WindowProc(窗口过程)的函数指针。这个窗口过程负责处理WM_LBUTTONUP等消息。每个窗口消息都有两个关联的参数,历史上称为lparamwparamWM_LBUTTONUPlparam 参数包含您想要的 x 和 y 坐标。您可以通过GET_X_LPARAM(lparam)GET_Y_LPARAM(lparam) 检索它们

    Windows 支持为单个HWND 链接多个WindowProc。这被称为"subclassing"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多