本文目录

jpg格式

jpg格式使用GDI+来做,gdi+还有个好处是不用建立内存DC,gdi+需要初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//头文件成员变量
ULONG_PTR m_gdiplusToken;
//构造函数(初始化)
Gdiplus::GdiplusStartupInput StartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken,&StartupInput,NULL);
//析构函数
Gdiplus::GdiplusShutdown(m_gdiplusToken);
//实现
void CChildView::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
// TODO: 在此处添加消息处理程序代码
using namespace Gdiplus;
Graphics gh(dc);
Image image(_T("bgp.jpg"));
gh.DrawImage(&image,0,0);//默认按图片大小显示
// 不要为绘制消息而调用 CWnd::OnPaint()
}

bmp格式

bmp用gdi的话需要双缓冲

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void CChildView::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
// TODO: 在此处添加消息处理程序代码
CDC dcMem;
dcMem.CreateCompatibleDC(&dc); // 创建 内存dc
CBitmap bmp;
BITMAP bitmap; //用这个对象 是因为可以得到图片的宽, 高
bmp.LoadBitmap(IDB_BITMAP_BACKGROUND);  //加载 图片
bmp.GetBitmap(&bitmap);
dcMem.SelectObject(&bmp); // 把图片加载到 内存 dc
dc.StretchBlt(1,1,800,480,&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); // 把内存dc里的内容 全部复制到 当前dc里来
// 不要为绘制消息而调用 CWnd::OnPaint()
}