void CXButton::OnPaint()
{
CRect PaintRect;
CPaintDC dc(this);
CDC MemDC;
CBitmap MemBitmap;
// 双缓冲绘图
GetClientRect(PaintRect);
if (MemDC.CreateCompatibleDC(&dc))
{
if (MemBitmap.CreateCompatibleBitmap(&dc, PaintRect.Width(), PaintRect.Height()))
{
if (HGDIOBJ OldObject = MemDC.SelectObject(MemBitmap))
{
// 拷贝背景图, 以处理透明色
if (MemDC.BitBlt(0, 0, PaintRect.Width(), PaintRect.Height(), &dc, 0, 0, SRCCOPY))
{
Gdiplus::Graphics g(MemDC);
// Paint here ...
dc.BitBlt(0, 0, PaintRect.Width(), PaintRect.Height(), &MemDC, 0, 0, SRCCOPY);
}
MemDC.SelectObject(OldObject);
}
MemBitmap.DeleteObject();
}
MemDC.DeleteDC();
}
}[MFC]OnPaint双缓冲绘图
最新推荐文章于 2021-12-15 12:02:56 发布
本文深入探讨了C++中使用双缓冲绘图技术实现高效图形渲染的方法,包括创建双缓冲、背景图拷贝及透明色处理等关键步骤。
954





