Re[4]: вывод текста в прозрачном окне.
От: Кодт Россия  
Дата: 10.11.05 09:48
Оценка:
Здравствуйте, Андрей, Вы писали:

А>Так ты сам пишешь:

А>  dc.SetBkMode(TRANSPARENT);

А>попробуй написать:
А>  dc.SetBkMode(OPAQUE);

Это относится лишь к тому, заливать фоновым цветом прямоугольник, в который выводится текст, или не заливать.

Рисование в "слоистом" окне автоматически будет учитывать альфа-канал — поэтому в том виде, как сделано сейчас, задача неразрешима.

Выход может быть в том, чтобы создать два окна, одно над другим. Нижнее окно полупрозрачное (WS_EX_LAYERED и т.д.), верхнее — прозрачное (WS_EX_TRANSPARENT) и рисует только текст — но уже без альфа-канала. Важно отключить в верхнем окне заливку фона (обработка WM_ERASEBKGND).
И разумеется, эти окна должны быть не родитель-ребёнок, а два независимых ребёнка, скажем, одного чисто прозрачного родитеhf — т.к. альфа-канал родителя распространяется на ребёнка.

Ещё один выход (довольно злодейский) состоит в прямом рисовании на экранный контекст.
Злодейский — потому, что не учитывает отсечки (и текст нарисуется поверх всех других окон). Впрочем, регион отсечки можно как-то выцарапать из контекста рисования...
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.