Если вы хотите нарисовать текст без фоновой заливки, SetBkMode(hdc,TRANSPARENT)
скажет GDI оставить фон при рисовании текста.
Фактически отобразить цвет текста текста с помощью альфы ... будет сложнее. GDI на самом деле не поддерживает альфа-каналы в API. За пределами AlphaBlend фактически все, что он делает, это сохраняет канал. На самом деле недопустимо устанавливать для старших битов COLOREF значения альфа, поскольку старший байт фактически используется для флагов, чтобы указать, является ли COLOREF (а не значение RGB) записью палитры.
Так что, к сожалению, ваш единственный реальный путь вперед - это:
- Создание 32-битной DIBSection. ( CreateDIBSection ). Это дает вам HBITMAP, который гарантированно сможет хранить альфа-информацию. Если вы создаете растровое изображение с помощью одной из других функций создания растрового изображения, оно будет иметь цветовую глубину устройства, которая может быть не 32 бит / с.
- DrawText на DIBSection.
- Когда вы создали раздел DIBSection, вы получили указатель на фактическую память. На данный момент вам нужно пройти через память и установить альфа-значения. Я не думаю, что DrawText вообще что-то сделает с альфа-каналом. Я думаю о простой проверке компонентов RGB каждого DWORD растрового изображения - если они являются основным цветом, переписывают DWORD с 50% (или любым другим) альфа-значением в альфа-байте, если они имеют цвет фона, перезаписывают с 100% альфа в альфа-байт. *
- AlphaBlend растровое изображение в конечном пункте назначения. AlphaBlend требует предварительного умножения альфа-канала в источнике.
*
Может быть достаточно просто установить DIBSection с 50% альфа перед выполнением DrawText и убедиться, что BKColor черный. Я не знаю, что DrawText может сделать с альфа-каналом, хотя. Требуются некоторые эксперименты.