用MFC显示两张位图
一张作为背景,另一张放在背景上,如坐标系上放一个空心的园,求高手解答 mfc
[解决办法]
内存DC
CreateCompatibleDC
[解决办法]
类似于这样的
case(WM_PAINT):
{
PAINTSTRUCT ps;
CDC *pDC = BeginPaint(&ps);
//客户区大小
CRect rcClient;
GetClientRect(rcClient);
int nWidth = rcClient.Width();
int nHeight = rcClient.Height();
CDC memDC; memDC.CreateCompatibleDC(pDC); //兼容DC
CBitmap bitMap; bitMap.LoadBitmap(IDB_BKIMAGE); //背景图片
CBitmap *pOldbmp = memDC.SelectObject(&bitMap); //位图选人内存DC
BITMAP bmpInfo; bitMap.GetBitmap(&bmpInfo); //获取背景图片信息
pDC->SetStretchBltMode(HALFTONE);//半色调
pDC->StretchBlt(0, 0, nWidth, nHeight, //目标尺寸
&memDC, //源DC
0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, //源尺寸
SRCCOPY); //贴背景图/缩放到客户区
//绘前景图片
bitMap.DeleteObject();
bitMap.LoadBitmap(IDB_BITMAP1);
bitMap.GetBitmap(&bmpInfo);
pDC->BitBlt(100, 100, bmpInfo.bmWidth, bmpInfo.bmHeight,
&memDC,
0, 0,
SRCCOPY);
//结束清理工作
memDC.SelectObject(pOldbmp); //恢复位图句柄
memDC.DeleteDC(); //删除内存DC
bitMap.DeleteObject(); //内存位图
EndPaint(&ps);
return 0;
}
[解决办法]
MFC 用GDI+画
初始化
Gdiplus::Graphics phics(m_gdiBitmap);
Gdiplus::Image image(CStringW("D:\\2010_Projects\\imitate\\imitate\\res\\base.jpg"));
phics.DrawImage(&image,0,0,1000,10000);
onpaint()
Gdiplus::Graphics myPhics(dc.m_hdc);
myPhics.DrawImage(m_gdiBitmap,Gdiplus::RectF(0,0,Gdiplus::REAL(rect.Width()),Gdiplus::REAL(rect.Height())),
m_validRect.X,m_validRect.Y,m_validRect.Width,m_validRect.Height,Gdiplus::UnitPixel);
GDI+不支持双缓冲,可以自己用两张画布,替换着画