2016-06-07 3 views
0

Я пытаюсь получить размеры HWND верхнего уровня. Т.е., я хочу текущие размеры основного HWND Firefox/Windows Explorer/и т. Д. окно.Получите текущие размеры окна, независимо от состояния минимизации/состояния/максимизации

GetWindowRect() не работает, если окно сведено к минимуму. GetWindowPlacement() работает в большинстве случаев (в том числе сведено к минимуму), но возвращает размеры окна SW_SHOWNORMAL. Поэтому, если я изменил размер Проводника до 100 пикселей на 100 пикселей, увеличьте окно, затем вызовите GetWindowPlacement(). Я получу размеры SW_SHOWNORMAL размером 100x100. Я хочу максимальные размеры, то есть текущие размеры окна.

Есть ли один размер для всех функций WinAPI, которые будут соответствовать всем моим делам? Т.е., скажите мне текущие размеры окна, когда он виден (независимо от того, находится ли он прямо сейчас)? Если нет, я думаю, мне придется позвонить GetWindowPlacement(), определить, минимизировано ли окно. Если значение true, используйте обычные размеры, иначе звоните GetWindowRect().

+1

Ваш вопрос не имеет смысла. Вы говорите, что хотите * текущие размеры *, но если окно сведено к минимуму, оно по определению не видно и в некотором смысле безразмерное. –

ответ

0

Использование IsIconic(hwnd) для определения состояния текущего окна ручки:

  1. Если нормальный/максимизировать состояние. Используйте GetWindowRect(hwnd, &rect), чтобы получить размеры.
  2. Если минимизировать состояние, вы должны восстановить окно, чтобы его размеры, как этот "3 & 5 - Restore/Minimize The Window"

Update: Использование IsIconic() вместо сравнения прямоугольник (Left, Top) с -32000 до определить состояние дескриптора окна, которое комментируется @IInspectable и @Raymond Chen.

+0

Где ссылка на официальную документацию для сравнения с -32000? – IInspectable

+2

Используйте «IsIconic» для обнаружения свернутого окна. Координаты свернутых окон не документированы (и не всегда меньше -32000). –

+0

@IInpectable. При минимизации не существует официальной документации для -32000. Это результат, который я использую в качестве примера для кода Google и журнала вывода. – GSP

1

GetWindowPlacement заполнит структуру WINDOWPLACEMENT с минимальным и максимальным позиционированием, а также нормальное положение окна.

Важно отметить, что возвращенные позиции окна находятся в рабочем пространстве, а не в координатах экрана, и поэтому должны использоваться в вызовах, которые принимают рабочее пространство, а не координаты экрана.

Практически это означает, что если пользователь разместил свою панель задач в верхней части экрана, то «0,0» соответствует верхнему левому пикселю под панелью задач.

Что касается размеров окна при максимальном увеличении, они будут соответствовать размерам монитора, в котором максимальное число окон увеличивается. В этом случае нет единого вызова API, который может ответить на этот вопрос, так как вопрос больше не имеет смысла: зачем вам максимизировать размер при максимальном размере, но «нормальный» размер при минимизации? Пользователь так же способен восстановить окно в максимально или нормальном состоянии.

+0

[Дополнительное чтение] (https://blogs.msdn.microsoft.com/oldnewthing/20040707-00/?p=38523) Особенно предупреждение о размещении окна в координатах рабочего пространства: координаты _not_ экрана. – theB

+0

И вы избили меня до предупреждения о системе координат окна/экрана. – theB