Получить размеры падающей тени окна

Мне нужно знать размеры тени в окне. Я пытался получить значения с помощью функции WinAPI GetSystemMetrics, но не смог найти параметр для передачи. Любая идея о том, как я могу получить это значение глобально (или для одного дескриптора окна)? Я знаю, что ширина тени зависит от типа окна (диалоговое окно / нормальное / и т. Д.). Я бы реализовал эту функциональность, используя C#, но C++ тоже подойдет.

1 ответ

Решение

Насколько я знаю, нет способа получить эту информацию. Такие программы, как WindowClippings, решают эту проблему путем создания снимка экрана и последующего кадрирования до размеров тени.

Существует способ использования DWM API для определения размера тени, однако он не работает, пока окно не станет видимым.

В предыдущих версиях Windows были Client Rect и Window Rect. Но с тех пор, как появилась Vista, появился третий Rect для окна под названием Extended Frame Bounds. Третий прямоугольник больше, чем клиентский прямоугольник, и меньше, чем оконный прямоугольник, и исключает область, занимаемую тенью.

Вызов DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &rect, sizeof(RECT)) читать прямоугольник расширенных рамок кадра. Эта функция от <dwmapi.h>и недоступно в Windows XP и более ранних версиях.

Обратите внимание, что если вы вызовете это до того, как будет показано окно, вы получите неверные результаты.

Другие вопросы по тегам