lacir Ответов: 2

Getwindowrect возвращает неправильные размеры


Привет там, у меня есть большая проблема с получением области hwind с
рутина GetWindowRect. Даже Spy++ или его реализация возвращает прямоугольник, то есть меньше реального
область. Это какой-то особый вид приложения, я ищу какую-то альтернативу ему. GetWindowRect,
или как я могу получить всю область окна программно корректной.

Что я уже пробовал:

Я пробовал Spy++ и debug GetWindowRect, но это не продвигает меня вперед.
Мне нужно каким-то образом выяснить, как окно посылает неправильный прямоугольник, как я могу получить правильный.

Richard MacCutchan

Пожалуйста, не повторяйте один и тот же вопрос. Вы уже задавали этот вопрос на форуме Managed C++.

2 Ответов

Рейтинг:
2

steveb

struct RECT, возвращаемый из GetWindowRect (), также может быть дополнительно обработан вызовом:
GetClientRect()
ScreenToClient()
ClientToScreen()

Твой голос звучит как один из тех случаев

Было бы полезно, если бы вы разместили размеры своей прямой кишки. Если вверху и слева оба == 0, то это координаты клиента, а если они выше нуля, то это координаты экрана.

Вы также должны обратить внимание на свое координатное пространство и функции преобразования:


[^]


lacir

реальные размеры 600х465
GetClientRect() возвращает в отладчике {LT(0, 0) RB(480, 372) [480 x 372]}
ClientToScreen(hwnd элемента, оператора reinterpret_cast&ЛТ;точка*&ГТ;(&амп;водонепроницаемые.слева)); {{Л(72, 0) РБ(480, 372) [408 х 372]}}
ClientToScreen(hwnd элемента, оператора reinterpret_cast&ЛТ;точка*&ГТ;(&амп;водонепроницаемые.справа)); {Л(72, 0) РБ(552, 372) [480 х 372]}
но площадь все еще меньше 480 x 372 без учета ClientToScreen() его заданного GetClientRect

Richard MacCutchan

В вашем первоначальном вопросе вы используете GetWindowRect, в этом-GetClientRect. Вам нужно понять разницу между этими двумя функциями.

lacir

Оба возвращают одинаковый размер 480x372, просто
GetWindowRect возвращает без позиционного сдвига координаты LT отличаются от 0 {LT(95, 310) RB(575, 682) [480 x 372]}

Richard MacCutchan

Что бы вы ни делали, с вашим кодом что-то не так. Если любой из этих методов вернет неверные значения, то более 90% всех приложений Windows перестанут работать.

Richard MacCutchan

У меня есть сильное подозрение, что вы получаете неправильную ручку окна.

steveb

Дважды проверьте, что вы создаете функции CreateWindow (). Windows имеет древовидную композицию, то есть можно создавать вложенные окна внутри родительского окна, вызывая CreateWindow() с дескриптором родительского окна. Если это так, то ваш шпион может сосредоточиться на другом окне. Изучите дерево в вашем шпионском приложении

lacir

Хорошо, я проверил с помощью Spy++ visual studio, он имеет правильный размер, проблема заключается в GetClientRect (), прежде чем я использовал реализацию Spy++ с этого сайта, и она показывает неправильно.

steveb

Вы можете проверить исходный код?

Рейтинг:
0

KarstenK

Я думаю, что у вас есть какой-то изъян в вашем коде или логике. Прочитайте Документация GetWindowRect и попробуйте пример кода. Может быть, ваша проблема заключается в понимании некоторых не клиентская зона.

Убедитесь, что вы вызываете правильный параметр, особенно дескриптор окна.


KarstenK

Покрасьте свое окно каким - нибудь цветом, чтобы увидеть разницу. Чем проверить другую область. Найди свою ошибку ;-)