1.原理:
设定要叠加的字符内容,
然后在内存中为这个字符串创建一个位图,
最后BitBlt 到设备上面去。
2. 实现:
void CCFontPeer(HWND hwndText, TCHAR *szNewText)
{
//创建一个与主窗口 DC兼容的内存DC
HDC hdc = GetDC ( hwndText );
HDC hdcBmp = CreateCompatibleDC(hdc);
//选入一个用户设定的字体
HFONT hOldFont = (HFONT) SelectObject ( hdcBmp, g_hFont );
//判断字符串的长度,以及为它创建一个位图需要的位图尺寸
int nLength;
int nTextBmpWidth;
int nTextBmpHeight;
// 在内存中创建一个位图
HBITMAP hbm = CreateCompatibleBitmap (hdc, nTextBmpWidth, nTextBmpHeight);
ReleaseDC( hwndText, hdc);
// 把要叠加的位图 选入内存兼容DC
BITMAP bm;
HBITMAP hBmpOld;
GetObject (hbm, sizeof(bm), &bm);
hBmpOld = (HBITMAP) SelectObject(hdcBmp, hbm);
// 初始化位图
RECT rcText;
SetRect (&rcText, 0, 0, nTextBmpWidth, nTextBmpHeight );
SetBkColor (hdcBmp, RGB(255, 255, 255)); // 位图的背景为白色
SetTextColor (hdcBmp, g_rgbColors); // 字符颜色由用户设定
// 在位图上画出字符内容
TextOut (hdcBmp, 0, 0, szNewText, nLength);
// 为将要叠加的位图填写一个 VMR9AlphaBitmap 描述信息
VMR9AlphaBitmap bmpInfo;
ZeroMemory( &bmpInfo, sizeof( bmpInfo));
bmpInfo.dwFlags = VMRBITMAP_HDC;
}