// 双缓冲的典型代码
void CRectGroup::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CDC mdc;
mdc.CreateCompatibleDC(&dc); // 创建内存DC,也就是画布 依附窗口dc
CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height()); // 创建内存位图,也就是画笔
mdc.SelectObject(&bmp); // 选择内存位图(也就是选择画笔)
CRect r1;
mdc.FillSolidRect(&rect,RGB(230,230,230));
r1.left = rect.left;
r1.right = rect.right/2;
r1.top = rect.top;
r1.bottom = 25;
if(r1.Width()>100)
{
r1.right = r1.left +100;
}
mdc.FillSolidRect(&r1,RGB(76,110,156));
CPen pen;
pen.CreatePen(PS_SOLID,2,RGB(76,110,156));
mdc.SelectObject(&pen);
mdc.MoveTo(r1.left,r1.bottom);
mdc.LineTo(rect.right,r1.bottom);
CString str;
GetWindowText(str);
mdc.SetTextColor(RGB(255,255,255));
mdc.SetBkMode(TRANSPARENT);
mdc.DrawText(str,&r1,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
r1.top = r1.bottom+1;
r1.bottom = rect.bottom;
r1.right =rect.right+2;
mdc.FillSolidRect(&r1,RGB(230,235,230));
dc.BitBlt(0,0,rect.Width(),rect.Height(),&mdc,0,0,SRCCOPY); //将内存DC上的图象拷贝到前台
}
MFC双缓冲典型代码
最新推荐文章于 2024-08-18 20:49:28 发布