MFC雙緩衝典型程式碼
阿新 • • 發佈:2019-01-08
// 雙緩衝的典型程式碼 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上的圖象拷貝到前臺 }