Я пытаюсь получить эффект стекла медиаплеера для приложения, но все время сталкиваюсь с препятствиями. Это я или API?
Я начал с звонка:
MARGINS margins = { -1, -1, -1, -1 };
HRESULT result = ::DwmExtendFrameIntoClientArea(m_hWnd, &margins);
И стирание фона на черном:
OnEraseBkgnd
Все было хорошо, пока я не добавил поле для редактирования. С EditBox места, где появляется черный текст, заменяются на стекло. Проблема раздута с более продвинутыми элементами управления, такими как ComboBoxEx и тому подобное. Те начинают выглядеть как беспорядок.
Яркой стороной этого подхода является то, что альфа-смешанные изображения выглядят хорошо. И постепенно смешиваются в стакан.
Решением для блоков редактирования, по-видимому, является использование WS_EX_LAYERED с LWA_COLORKEY, использование какого-то ужасного цвета для маскировки стекла и стирание фона до этого цвета. К сожалению, это ломает другие вещи. Альфа-смешивание на значках выглядит безобразно с тенями, смешанными с радиоактивным зеленым, и само стекло становится пригодным для щелчка, даже если у меня нет стиля WS_EX_TRANSPARENT в окне.
Третье предложение - это своего рода композиция с GDI +, но это кажется плохим подходом, поскольку GDI + - это запасной вариант программного обеспечения, и я не могу найти способ визуализации EditBox или ComboBoxEx в изображение, которое я мог бы использовать для композиции позже.
Я что-то упустил?
Источники в SO также, похоже, сталкиваются с такими же проблемами:
link1
link2