都要放在背景里搞~
Win32:
case WM_ERASEBKGND:
{
HDC hDC = (HDC)wParam;
ShowPic(hDC);
}
void ShowPic(HDC hDC)
{
TCHAR strFileName[] = TEXT("//My Documents//我的图片//Flower.jpg");
int size = 2;
//设置缓冲区区域
HDC hdcMem = CreateCompatibleDC(hDC);
//加载图片区 todo: 判断图片加载是否成功
//HBITMAP bitMap = SHLoadDIBitmap(strFileName);
HBITMAP bitMap = SHLoadImageFile(strFileName);
//将图片区加载到缓冲区,并保存原缓冲区图片区用于恢复缓存区
HBITMAP oldBitMap = (HBITMAP)SelectObject(hdcMem, bitMap);
//将缓冲区图片区内容赋给图片变量
BITMAP bmp;
GetObject(bitMap, sizeof(BITMAP), &bmp);
//设置双缓冲区区域
HDC hdcMemCatch = CreateCompatibleDC(hDC);
//设置双缓冲区图片区域
HBITMAP bitMapCatch=CreateCompatibleBitmap(hDC,240,320);
//将图片区加载到双缓冲区 此时二者皆无值
SelectObject(hdcMemCatch, bitMapCatch);
//设置缩放大小
if (0 == bmWidth && 0 == bmHeight)
{
bmWidth = bmp.bmWidth;
bmHeight = bmp.bmHeight;
}
else if (bmWidth >= 2 && bmHeight >= 2)
{
if (0 == flag)
{
bmWidth /= size;
bmHeight /= size;
}
else
{
bmWidth *= size;
bmHeight *= size;
}
}
//将缓冲区Copy到双缓冲区
StretchBlt(hdcMemCatch, 0, 0, bmWidth, bmHeight, hdcMem, 0, 0,bmp.bmWidth, bmp.bmHeight, SRCCOPY);
//用双缓冲区的值给设备区赋值
BitBlt(hDC, 0, 0, 240,320, hdcMemCatch, 0, 0, SRCCOPY);
//恢复缓冲区的值为加载图片前的值
SelectObject(hdcMem, oldBitMap);
DeleteDC(hdcMemCatch);
DeleteDC(hdcMem);
}
MFC:
BOOL CPhotoViewerMFCDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDC *cDC=GetDC();
TCHAR strFileName[] = TEXT("//My Documents//我的图片//Flower.jpg");
int size = 20;
CDC bitmapDC;
bitmapDC.CreateCompatibleDC(cDC);
CBitmap bitmap;
bitmap.Attach(SHLoadImageFile(strFileName));
CBitmap* pOldBitmap = bitmapDC.SelectObject(&bitmap);
BITMAP bmpInfo;
bitmap.GetBitmap(&bmpInfo);
CDC bitmapDCCatch;
bitmapDCCatch.CreateCompatibleDC(NULL);
CBitmap bitmapCatch;
bitmapCatch.CreateCompatibleBitmap(cDC,240,320);
bitmapDCCatch.SelectObject(&bitmapCatch);
//bitmapDCCatch.FillSolidRect(0,0,240,320,RGB(255,255,255));
//设置缩放大小
if (0 == m_bmWidth && 0 == m_bmHeight)
{
m_bmWidth = bmpInfo.bmWidth;
m_bmHeight = bmpInfo.bmHeight;
}
else if (m_bmWidth >= 2 && m_bmHeight >= 2)
{
if (0 == m_flag)
{
m_bmWidth -= size;
m_bmHeight -= size;
}
else
{
m_bmWidth += size;
m_bmHeight += size;
}
}
bitmapDCCatch.StretchBlt(0, 0, m_bmWidth, m_bmHeight, &bitmapDC,
0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);
cDC->BitBlt(0, 0, 240, 320, &bitmapDCCatch,
0, 0, SRCCOPY);
bitmapDC.SelectObject(pOldBitmap);
bitmap.DeleteObject();
bitmapDCCatch.DeleteDC();
bitmapDC.DeleteDC();
//return CDialog::OnEraseBkgnd(cDC);
return TRUE;
}