Вывод текста DrawText

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
AndrejK77
Сообщения: 1
Зарегистрирован: 12 апр 2008, 15:50

Необходимо в обычном окне нарисоваль картинку, а потом поверх этой картинки вывести надпись функцией DrawText, но так чтоб фон текста не стер нарисованное ранее изображение.

Я делал так:
1. Создовал контекст
memDC = CreateCompatibleDC(hdc);
2. Создовал BITMAP
memBM = CreateCompatibleBitmap ( hdc, maxX, maxY );
3. Выбирал нужные обьекты
SelectObject ( memDC, memBM );
SelectObject ( memDC, hFont );
4. Устанавливал прозрачный цвет фона
SetBkColor(memDC, TRANSPARENT);
5. Рисовал картинку
pImage->Draw(memDC, ......)
6. Рисовал текст
DrawText(memDC, ......)
7. Капировал результат на нужное окно
BitBlt(hdc, ........, memDC, .....)

Однако под надписью картинки не видно её затирает фон надписи.
Помогите!
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Вариантов здесь несколько. Самый простой - использовать TextOut вместо DrawText так, как SetBkMode влияет на работу первой функции, но не влияет на работу второй.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Romeo писал(а):Вариантов здесь несколько. Самый простой - использовать TextOut вместо DrawText так, как SetBkMode влияет на работу первой функции, но не влияет на работу второй.
Так в том-то и прикол, что если верить MSDN (и естли я правильно понял приведенный ниже текст), то влияет:

Код: Выделить всё

[b]DrawText[/b]
.......................
[b]Remarks[/b]
The [b]DrawText[/b] function uses the device context's selected font, text color,
and background color to draw the text........................
Eugie
Сообщения: 708
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

В п.4 ошибка, нужно вызывать SetBkMode(memDC, TRANSPARENT);
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

&quot писал(а):Так в том-то и прикол, что если верить MSDN (и естли я правильно понял приведенный ниже текст), то влияет:
Ты BkColor и BkMode путаешь.
&quot писал(а):В п.4 ошибка, нужно вызывать SetBkMode(memDC, TRANSPARENT);
А вот Eugie оказался более внимательным. Я хотя писал о BkMode, но то, что челоек использует BkColor не заметил :) . Так что используй, AndrejK77, BkMode и TextOut.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить