Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Прозрачная иконка BitBlt + мелкий шрифт


Автор: suxxor 27.3.2015, 14:45
всё работает нормально, до тех пор пока не начинаю использовать маленький шрифт. с маленьким шрифтом цвет маски прозрачности просачивается в фон (см. скриншот).

1) маленький шрифт (проблема)!
user posted image

2) обычный шрифт (всё в порядке)
user posted image

Код:
Код

RECT rc = {0};

rc.right = rc.bottom = 32;

HDC dc = GetDC(NULL);

HDC dc_buff = CreateCompatibleDC(dc);
HDC dc_mask = CreateCompatibleDC(dc);

HBITMAP bitmap = CreateDIBSection(dc, &bmi, DIB_RGB_COLORS, NULL, NULL, 0);
HBITMAP bitmap_mask = CreateBitmap(rc.right, rc.bottom, 1, 1, NULL);

HBITMAP old_bitmap = (HBITMAP)SelectObject(dc_buff, sd.bitmap);

// draw transparent background mask
FillRect(dc_buff, &rc, CreateSolidBrush(RGB(255, 0, 255)));

// draw text
SetTextColor(dc_buff, RGB(255, 255, 255));
SetBkMode(dc_buff, TRANSPARENT);

DrawTextEx(dc_buff, L"xD", 2, &rc, DT_VCENTER | DT_CENTER | DT_SINGLELINE | DT_NOCLIP, NULL);

// create transparent mask
HBITMAP old_mask = SelectObject(dc_mask, sd.bitmap_mask);

SetBkColor(dc_buff, COLOR_TRAY_MASK);
BitBlt(dc_mask, 0, 0, sd.rc.right, sd.rc.bottom, dc_buff, 0, 0, SRCCOPY);

SelectObject(dc_mask, old_mask);
SelectObject(dc_mask, old_bitmap);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)