15,979
社区成员
发帖
与我相关
我的任务
分享
BOOL ::OnEraseBkgnd(CDC* pDC)
{
CBitmap bitmap;
bitmap.LoadBitmap(IDB_XXX_BMP);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(&bitmap);
CRect rect;
GetWindowRect(&rect);
pDC-> StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
// return CDialog::OnEraseBkgnd(pDC);
return TRUE;
}
void CGdiTestView::OnDraw(CDC* pDC)
{
CGdiTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// 输出文字串, 代表图像中的原有的内容
CString str = L"测试文字!!";
pDC->TextOut(0, 0, str);
// 在原有内容的基础上添加水印
AppendWaterMark(pDC);
}
VOID CGdiTestView::AppendWaterMark(CDC* pDC/* 窗口DC */)
{
// 保存源窗口图像的内存DC
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
// 将源窗口的内容复制到内存DC中
MemDC.BitBlt(0, 0, 100, 100, pDC, 0, 0, SRCCOPY);
// 水印BITMAP
CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
// 创建用于存放水印的DC
CDC MarkerWaterDC;
MarkerWaterDC.CreateCompatibleDC(pDC);
MarkerWaterDC.SelectObject(&Bitmap);
// 将水印透明化
BLENDFUNCTION BlendFunction;
BlendFunction.AlphaFormat = AC_SRC_ALPHA;
BlendFunction.BlendFlags = 0;
BlendFunction.BlendOp = AC_SRC_OVER;
BlendFunction.SourceConstantAlpha = 200;
MarkerWaterDC.AlphaBlend(0, 0, 100, 100, &MemDC, 0, 0, 100, 100, BlendFunction);
// 将水印DC叠加到内存DC上
MemDC.BitBlt(0, 0, 100, 100, &MarkerWaterDC, 0, 0, SRCCOPY);
// 将叠加后的内存DC输出到实际的窗口DC中
pDC->BitBlt(0, 0, 100, 100, &MemDC, 0, 0, SRCCOPY);
}