Установка прозрачного фона Win32 - PullRequest
9 голосов
/ 19 мая 2011

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

1 Ответ

7 голосов
/ 19 мая 2011

Существует два основных способа достижения «прозрачных» дочерних элементов управления в Windows:

  • Обработка сообщений WM_CTLCOLORxxx в родительском окне.Это удобный способ заставить существующие элементы управления поддерживать прозрачность.Каждый элемент управления отправит сообщение WM_CTLCOLORxxx, соответствующее типу элемента управления.Если вы создаете кисть, которая представляет фоновую обложку диалога, и возвращаете ее из каждого сообщения, чистый эффект будет таким, как если бы каждый элемент управления был закрашен прозрачной внешней областью.Однако это не работает, если вы хотите, чтобы альфа-эффекты или элементы управления перекрывали друг друга.

  • Используйте WS_EX_COMPOSITED в родительском окне.Без этого стиля оконные менеджеры порядка рисования дочерних окон не определены, на практике это сверху вниз.При попытке альфа-наложения перекрывающихся элементов управления результат будет ... неприятным.WS_EX_COMPOSITED обеспечит окрашивание дочерних окон снизу вверх.Убедитесь, что вы НЕ используете стили WS_CLIPCHILDREN или WS_CLIPSIBLINGS, так как это вообще не позволит окрашивать перекрывающиеся области.

Вам все равно нужно сделать что-то умное с помощью сообщений WM_CTLCOLORxxx, так какстандартные элементы управления все еще будут пытаться заполнить весь прямоугольник диалоговым окном фонового серого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...