Координаты Qt grabWindow сдвинуты от GetCursorPos и ​​GetWindowRect - PullRequest
0 голосов
/ 23 апреля 2010

В Qt, когда я использую функцию QPixmap :: grabWindow (hwnd, x, y, h, w), координаты слегка сдвигаются по сравнению с координатами с использованием функций api окон GetCursorPos и ​​GetWindowRect.

т.е. (0,0) с точки зрения GetCursorPos и ​​GetWindowRect находится в самом верхнем левом углу панели инструментов в верхней части окна.

Но (0,0) для QPixmap ::grabWindow более «внутри» (т.е. игнорирует оконную раму).

Как сделать эти 2 координаты согласованными?Тем более что пользователь может иметь разную толщину для оконной рамы?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Я согласен с Kotti .... если вы используете Qt, придерживайтесь только вызовов Qt. Вы, вероятно, можете заменить вызовы GetCursorPos () на QCursor :: pos () и GetWindowRect () на window () -> geometry ().

Тем не менее, если вы должны вызывать Windows API напрямую, вы можете определить смещение между двумя системами координат динамически, вызвав эквивалентную функцию в каждом API с одинаковыми аргументами и вычитая результаты друг от друга. Затем вы можете использовать эту дельту для перевода из одной системы координат в другую по мере необходимости. Это сработало бы, но это было бы больно, так что делайте это только в случае крайней необходимости.

0 голосов
/ 23 апреля 2010

Я думаю, что лучшей идеей будет придерживаться только одного типа координат. Таким образом, вы не будете беспокоиться такими вопросами, как «Являются ли эти координаты из функции winapi из функции grabWindow», «Нужно ли преобразовывать эти координаты в первый или второй тип».

Конечно, я могу ошибаться, но я склонен думать, что есть хороший подход или возможность изменить дизайн вашего приложения, которое будет использовать только один из упомянутых типов координат.

...