Вопрос

Я хотел бы создать окно верхнего уровня (т.е., а не ws_child) с прозрачностью. Тем не менее, я не хочу, чтобы это была простая маска, где данный пиксель является либо полностью прозрачным, либо полностью непрозрачным. И я не хочу, чтобы это было так, чтобы у всего окна был альфа -уровень. Скорее, я бы хотел, чтобы окно по существу было полностью прозрачным, с растровой картой, натянутой к нему с помощью альфа -канала, так что растровое изображение смешивается с любыми окнами за ним. Скажите, скажем, солнечный лун, где собственная альфа -изображение смешивается от непрозрачного до полного прозрачного наружу из центра.

Я нашел два метода, которые оба приближаются к тому, что я хочу сделать, но не совсем. Используя регионы, я могу вырезать раздел, который нарисован, полностью прозрачный. Используя слоистые окна, я также могу сделать что -то подобное (или даже сделать все окно слегка прозрачным, но это не то, что я вообще хочу). Я изучил другие стили, такие как ws_ex_transparent и ws_ex_composite, но безрезультатно.

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

Я знаю, что это можно сделать, так как люди заверили меня, что видели это в других программах. Я чувствую, что я просто не совсем понимаю что -то простое о рисовании окон.

Это было полезно?

Решение

Слоистые окна (WS_EX_LAYERED) должен выполнять работу, учитывая, что вы должны использовать UpdateLayeredWindow() и несколько необычный формат растрового изображения (32-разрядная, предварительно-мультифицированная альфа), чтобы указать значения альфа-пикселя (Alpha (SetLayeredWindowAttributes() позволит вам указать только одно альфа -значение для всего окна или цветной клавиши).

Вы говорите, что уже пробовали это - какие проблемы вы испытали?

Другие советы

Единственный способ, которым я знаю, чтобы получить альфа-пиксель на окне,-это UpdateLayeredWindow ().
Проверьте эту ссылку MSDN: http://msdn.microsoft.com/en-us/library/ms997507.aspx

Обратите внимание, что при использовании UpdateLayeredWindow приложению не нужно отвечать на WM_PAINT или другие сообщения о рисовании, потому что оно уже предоставило визуальное представление для окна, и система позаботится о хранении этого изображения, сочинении и его рендеринге на экран. UpdateLayeredWindow довольно мощный, но часто требуется изменение способа приложения Win32.

Бьюсь об заклад, это проблемы, которые вы испытывали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top