//本例其实并没有使位图变成透明的,而是用TransparentBlt在贴上位图的时候,使背景颜色为透明色。当然你也可以认为这是创建了一个透明的DC。
void CXXXdlg::OnPaint()
{
CPaintDC dc(this);
CString strText = _T("测试透明");
CDC memoryDC;
CBitmap textBmp;
memoryDC.CreateCompatibleDC(&dc);
int bmpW = memoryDC.GetTextExtent(strText).cx;
int bmpH = memoryDC.GetTextExtent(strText).cy;
textBmp.CreateCompatibleBitmap(&dc, bmpW, bmpH); //创建的位图,默认背景是黑色的
CBitmap *pOldbmp = memoryDC.SelectObject(&textBmp);
memoryDC.SetBkMode(TRANSPARENT);
memoryDC.SetTextColor(RGB(233, 233, 233));
memoryDC.TextOut(0, 0, strText);
dc.TransparentBlt(pt.x, pt.y, bmpW, bmpH, &memoryDC, 0, 0, bmpW, bmpH, RGB(0, 0, 0)); //黑色背景透明
memoryDC.SelectObject(pOldbmp);
memoryDC.DeleteDC();
textBmp.DeleteObject();
}