Получить размеры падающей тени окна
Мне нужно знать размеры тени в окне. Я пытался получить значения с помощью функции 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 и более ранних версиях.
Обратите внимание, что если вы вызовете это до того, как будет показано окно, вы получите неверные результаты.