【问题标题】:Qt grabWindow coordinates shifted from GetCursorPos and GetWindowRectQt grabWindow 坐标从 GetCursorPos 和 GetWindowRect 转移
【发布时间】:2010-04-23 01:04:29
【问题描述】:

在 Qt 中,当我使用 QPixmap::grabWindow(hwnd,x,y,h,w) 函数时,与使用 windows api 函数 GetCursorPos 和 GetWindowRect 的坐标相比,坐标略有偏移。

即(0,0) 从 GetCursorPos 和 GetWindowRect 的角度来看,它位于窗口顶部工具栏的最左上角。

但是 QPixmap::grabWindow 的 (0,0) 更“内部”(即忽略窗口框架)。

如何使这两个坐标一致?特别是因为用户可能对窗框有不同的厚度?

【问题讨论】:

    标签: c++ winapi qt mouse screenshot


    【解决方案1】:

    我同意 Kotti.... 如果您使用 Qt,请仅使用 Qt 调用。您可能可以用 QCursor::pos() 替换对 GetCursorPos() 的调用,用 window()->geometry() 替换对 GetWindowRect() 的调用。

    也就是说,如果您必须直接调用 Windows API,您可以通过在每个 API 中调用具有相同参数和将结果相互减去。然后,您可以根据需要使用该增量从一个坐标系转换到另一个坐标系。这会起作用,但会很痛苦,所以只有在绝对必要时才这样做。

    【讨论】:

      【解决方案2】:

      我认为最好的办法是只使用一种坐标。这样您就不会为诸如“这些坐标来自 winapi 函数还是来自 grabWindow 函数”、“我是否必须将这些坐标转换为第一种类型或第二种类型”之类的问题而烦恼。

      当然,我可能是错的,但我倾向于认为有一种很好的方法或能力来重新设计您的应用程序,它只会使用提到的一种坐标类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多