void BitmapControl::OnDraw(CDC* dc) { RECT r; GetClientRect(&r); int w1 = r.right - r.left; int h1 = r.bottom - r.top; CDC memDC; memDC.CreateCompatibleDC(dc); if(!stretch) { if(w > w1) w1 = w; if(h > h1) h1 = h; } CBitmap bitmap, *pOldBitmap; bitmap.CreateCompatibleBitmap(dc, w1, h1); pOldBitmap = memDC.SelectObject(&bitmap); if(stretch) { bmpInfo->bmiHeader.biWidth = w; bmpInfo->bmiHeader.biHeight = -h; StretchDIBits(memDC.GetSafeHdc(), 0, 0, w1, h1, 0, 0, w, h, data, bmpInfo, DIB_RGB_COLORS, SRCCOPY); } else { FillOutsideRect(&memDC, CBrush::FromHandle(GetSysColorBrush(COLOR_BTNFACE))); bmpInfo->bmiHeader.biWidth = w; bmpInfo->bmiHeader.biHeight = -h; SetDIBitsToDevice(memDC.GetSafeHdc(), 0, 0, w, h, 0, 0, 0, h, data, bmpInfo, DIB_RGB_COLORS); } dc->BitBlt(0,0,w1,h1, &memDC,0,0,SRCCOPY); memDC.SelectObject(pOldBitmap); bitmap.DeleteObject(); memDC.DeleteDC(); }
BOOL CBigScrollView::OnEraseBkgnd(wxDC* pDC) { wxRect rectClient; GetClientRect(&rectClient); wxBrush BackGround(m_colorBackGnd); // if client area is larger than total device size wxPoint pointOrg = GetDeviceOrg(); if (pointOrg != wxPoint(0, 0)) FillOutsideRect(pDC, &BackGround); else pDC->FillRect(rectClient, &BackGround); return TRUE; }
// Overide OnEraseBkgnd() to clear area outside view but not bits // were going to repaint. // BOOL CTextureView::OnEraseBkgnd(CDC* pDC) { CBTEditDoc* pDoc = GetDocument(); CBrush br(RGB(0,0,0)); switch(pDoc->GetTVMode()) { case MTV_TEXTURES: FillOutsideRect( pDC, &br ); return TRUE; // Erased default: return CWnd::OnEraseBkgnd(pDC); } }
BOOL CAutoPFAView::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default //CScrollView::OnEraseBkgnd(pDC); CAutoPFADoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); /* wndbkBrush.CreateSolidBrush(RGB(128,128,128)); wndbkBrush.DeleteObject(); */ CBrush wndbkBrush; wndbkBrush.CreateSolidBrush(pDoc->m_workSpaceRef.GetbkColor()); FillOutsideRect(pDC,&wndbkBrush);//把组件范围外的区域也刷成客户区域背景颜色,这样看起来不会闪屏 CRect rc(CPoint(0,0),GetTotalSize()); pDC->FillRect(rc, &wndbkBrush); wndbkBrush.DeleteObject(); return TRUE; }
BOOL COXImageViewer::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default ASSERT_VALID(pDC); CBrush brush(m_clrBackground); //Bug-fix - by Nish - Mar 9th, 2005 if(IsEmpty()) { CRect rect; GetClientRect(&rect); pDC->FillRect(&rect,&brush); } else FillOutsideRect(pDC,&brush); return TRUE; }