2010-04-23 1 views
0

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

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

Но (0,0) для QPixmap :: grabWindow больше «внутри» (т. Е. Игнорирование оконной рамы).

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

ответ

0

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

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

2

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

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