MFC双缓冲技术(Gdi+)

1.创建一个一个最简窗口(见前文)

2.在stdafx.h中添加对Gdi+的支持

#include<gdiplus.h>
#pragma comment(lib,"Gdiplus.lib")
using namespace Gdiplus;

在App类中添加三个私有成员

ULONG_PTR m_tokenGdiplus;
Gdiplus::GdiplusStartupInput input;
Gdiplus::GdiplusStartupOutput output;

在其InitInstance函数实现中添加

Status s=GdiplusStartup(&m_tokenGdiplus,&input,&output);

在其ExitInstance函数实现中添加

Gdiplus::GdiplusShutdowm(m_tokenGdiplus);

3.在CMainFrame类中添加私有成员

Image* img;
RectF rc{0,10,200,300};

4。在CMainFrame的构造函数中添加
 

img=Image::FromFile(_T("res/图片名"));//图片放在res文件内

 

 

4.在CMainFrame类中添加OnPaint()函数(类向导),修改OnPaint()函数

 

 

void CMainFrame::OnPaint()
{
	HDC hdc = ::GetDC(GetSafeHwnd());
	CDC* pDC = CClientDC::FromHandle(hdc);//获取窗口DC
	CDC m_dcMemory;//缓冲DC
	CBitmap bmp;//缓冲位图
	bmp.CreateCompatibleBitmap(pDC, rc.Width,rc.Height);//创建位图
	m_dcMemory.CreateCompatibleDC(pDC);//缓冲DC初始化
	CBitmap* pOldBitmap = m_dcMemory.SelectObject(&bmp);//将位图和缓存DC关联
									   //gdi+绘图
	Graphics gh(m_dcMemory.GetSafeHdc());

	//绘图代码
	{

		gh.DrawImage(img, rc);
	}
	::BitBlt(hdc, 0, 0, rc.Width, rc.Height, m_dcMemory.GetSafeHdc(), 0, 0, SRCCOPY);//将缓存DC的内容复制到屏幕
	ReleaseDC(pDC);//只有自己创建的CDC才能使用DeleteDC
        m_dcMemory.SelectObject(pOldBitmap);
        m_dcMemory.DeleteDC();//自己创建的
        DeleteObject(bmp);
}

 

 

调试

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值