我有以下的代码,那种只要你屏蔽掉粉像素不过是我真正想要的作品就像一个PNG文件,这样就可以避开Alpha混合的问题和需要透明位屏蔽掉特定的颜色处处将位图使用。如何在CBitmap上使用具有透明背景的CDC绘制文本?
CClientDC dc(pWnd);
CDC memDC;
if(!memDC.CreateCompatibleDC(&dc))
return NULL;
CRect bitmapRect;
bitmapRect.SetRectEmpty();
CFont* pOldFont = memDC.SelectObject(pWnd->GetFont());
CSize fontSize = memDC.GetTextExtent(imageText);
bitmapRect.right = fontSize.cx;
bitmapRect.bottom = fontSize.cy;
CBitmap bitmap;
if(!bitmap.CreateCompatibleBitmap(&dc, bitmapRect.Width(), bitmapRect.Height()))
return NULL;
CBitmap* pOldMemDCBitmap = memDC.SelectObject(&bitmap);
memDC.FillSolidRect(&bitmapRect, RGB(255,0,255));
//memDC.SetBkMode(TRANSPARENT); // doesn't work
//memDC.SetBkColor(TRANSPARENT); // doesn't work
memDC.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
//memDC.DrawText(imageText, bitmapRect, DT_TOP|DT_LEFT|DT_NOCLIP); // same difference
memDC.TextOut(0, 0, imageText);
memDC.SelectObject(pOldMemDCBitmap);
memDC.SelectObject(pOldFont);
memDC.DeleteDC();
CImageList bmImage;
bmImage.Create(bitmapRect.Width(), bitmapRect.Height(), ILC_COLOR32|ILC_MASK, 0, 1);
// this masks out the pink but for some windows blends edges of text causing pink text instead of black!
bmImage.Add(&bitmap, RGB(255,0,255));
只是错误填充的野兽,是MFC行为不当或我错过了什么?问这个
IIRC'SetBkMode(透明)'应该做的伎俩。你没有任何机会只尝试将该行结合随后对'SetBkColor(TRANSPARENT)'的调用(它可能会将常数TRANSPARENT解释为某个颜色值,并且可能会覆盖透明模式)......? – HostileFork
没有那些相互排斥只是我试过的东西的残余......我想我只是想出了我的问题,但在我更新或发布答案之前进行测试。 – AJG85