DwmExtendFrameIntoClientArea без TransparencyKey? - PullRequest
2 голосов
/ 22 января 2011

При использовании функции DwmExtendFrameIntoClientArea мне нужно выбрать Form.TransparencyKey, цвет, на котором будет нарисован стакан.

Проблема в том, что я пишу инструмент для редактирования изображений, и когда TransparencyKey цвет появляется внутри отредактированного изображения, пользователь вместо этого видит стекло.

Как мне расширить стекло в зону клиента, не теряя цвет?

1 Ответ

0 голосов
/ 22 января 2011

Нет причин, по которым вам следует использовать свойство Form.TransparencyKey с функциями DWM.Это свойство относится к многослойным окнам, которые не имеют ничего общего с эффектом стекла Aero.Я предполагаю, что тот факт, что он может работать, является скорее следствием детализации реализации (как и все 3 значения RGB цвета, который вы задали как TransparencyKey, одинаковы), а не как бы по дизайну.

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

Конечно, любой черный текст (например, нарисованный на элементах управления), который появляется вобласть, которую вы визуализируете, так как стекло будет выглядеть ужасно.Решением является либо переключение на рендеринг на основе GDI +, либо перемещение элементов управления за пределы области, которая будет отображаться как стекло.Если вам нужен более точный контроль над областью вашей формы, которая должна выглядеть гладкой, чем предусмотрено DwmExtendFrameIntoClientArea (что буквально просто увеличивает кадр на заданную величину), используйте вместо этого DwmEnableBlurBehindWindow.См. мой более полный ответ здесь о том, как использовать эту функцию.

...