Qt grabWindow坐标从GetCursorPos和GetWindowRect转移

时间:2010-04-23 01:04:30

标签: c++ winapi qt mouse screenshot

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我同意Kotti ....如果你使用的是Qt,只能坚持使用Qt。您可以使用带窗口() - > geometry()的QCursor :: pos()和GetWindowRect()替换对GetCursorPos()的调用。

也就是说,如果您必须直接调用Windows API,您可以通过使用相同的参数调用每个API中的等效函数来动态地找出两个坐标系统之间的偏移量。减去彼此的结果。然后,您可以根据需要使用该delta来从一个坐标系转换到另一个坐标系。这样可行,但这会很痛苦,所以只有你绝对必须这样做才能做到。

答案 1 :(得分:0)

我认为最好的想法是只坚持一种坐标。这样你就不会打扰自己这样的问题,比如“这些坐标来自于来自grabWindow函数的winapi函数”,“我是否必须将这些坐标转换为第一类或第二类”。

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