1. 程式人生 > >MFC雙緩衝典型程式碼

MFC雙緩衝典型程式碼

// 雙緩衝的典型程式碼
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上的圖象拷貝到前臺

}