在图像背景上输出透明文本
在设计应用程序界面时,通常需要在原有的图像基础上输出透明的文本。为了能够输出背景透明的文本,可以调用CDC类的SetBkMode方法将背景模式设置为透明。该方法语法格式如下:
int SetBkMode( int nBkMode );
参数说明:
nBKMode:表示设置的背景模式,如果为TRANSPARENT,表示背景模式为透明,如果为OPAQUE,表示以当前的背景颜色填充背景。
为了演示输出透明文本,下面的示例首先在窗口中绘制一幅位图,然后在位图上输出透明的文本。
例如,在位图上输出透明的文本。
(1)创建一个单文档/视图结构的应用程序,工程名称为“TransText”。
(2)在视图类的OnDraw方法中编写程序代码。
void CTransTextView::OnDraw(CDC* pDC)
{
CTransTextDoc* pDoc = GetDocument(); //获取文档对象
ASSERT_VALID(pDoc); //验证文档对象
CBitmap bmp; //定义一个位图对象
bmp.LoadBitmap(IDB_BKBITMAP); //加载位图
BITMAP bInfo; //定义位图结构
bmp.GetBitmap(&bInfo); //获取位图信息
int width = bInfo.bmWidth; //获取位图宽度
int height = bInfo.bmHeight; //获取位图高度
CDC memDC; //定义一个设备上下文
memDC.CreateCompatibleDC(pDC); //创建一个兼容的设备上下文
memDC.SelectObject(&bmp); //选中位图对象
pDC->BitBlt(0,0,width,height,&memDC,0,0,SRCCOPY); //在设备上下文中绘制位图
memDC.DeleteDC(); //释放设备上下文
bmp.DeleteObject(); //释放位图对象
CFont mFont; //定义一个字体对象
//创建字体
VERIFY(mFont.CreateFont(
24, 20, 0, 0, FW_HEAVY, FALSE, FALSE,
0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS, "宋体"));
CFont* pOldFont = pDC->SelectObject(&mFont); //选中创建的字体
pDC->SetBkMode(TRANSPARENT); //设置透明的背景模式
pDC->SetTextColor(RGB(0,255,0)); //设置文本颜色
pDC->TextOut(60,60,"田园生活"); //输出文本
pDC->SelectObject(pOldFont); //选中之前的文本
mFont.DeleteObject(); //释放字体对象
}
注意:在使用SetBkMode方法设置背景模式时,必需在每次绘制文字前使用。
(3)运行程序,效果如图1所示。
.jpg)
图1 透明文本