//******************************************************************************* void CBCGPChartObject::OnDraw(CBCGPGraphicsManager* pGM, const CBCGPRect& rectDiagram) { ASSERT_VALID(this); if (m_pParentChart == NULL || !IsVisible()) { return; } BOOL bWasTransparency = CBCGPGraphicsManagerGDI::IsTransparencyEnabled(); CBCGPGraphicsManagerGDI::EnableTransparency(); ASSERT_VALID(m_pParentChart); if (!m_pParentChart->OnDrawChartObjectShape(pGM, rectDiagram, this)) { OnDrawShape(pGM, rectDiagram); } if (!m_strText.IsEmpty() && !m_pParentChart->OnDrawChartObjectText(pGM, rectDiagram, this)) { OnDrawText(pGM, rectDiagram); } CBCGPGraphicsManagerGDI::EnableTransparency(bWasTransparency); }
////////////////// // Draw the tab: mimic SysTabControl32, except use gray if tab is disabled // void CMyTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { DRAWITEMSTRUCT& ds = *lpDrawItemStruct; int iItem = ds.itemID; // Get tab item info char text[128]; TCITEM tci; tci.mask = TCIF_TEXT; tci.pszText = text; tci.cchTextMax = sizeof(text); GetItem(iItem, &tci); // use draw item DC CDC dc; dc.Attach(ds.hDC); // calculate text rectangle and color CRect rc = ds.rcItem; rc += CPoint(1,4); // ?? by trial and error // draw the text OnDrawText(dc, rc, text, !IsTabEnabled(iItem)); dc.Detach(); }
//***************************************************************************** void CBCGPCaptionBar::DoPaint(CDC* pDCIn) { ASSERT_VALID(this); ASSERT_VALID(pDCIn); CBCGPMemDC memDC(*pDCIn, this); CDC* pDC = &memDC.GetDC(); CRect rectClient; GetClientRect(rectClient); OnDrawBackground (pDC, rectClient); int nOldBkMode = pDC->SetBkMode (TRANSPARENT); COLORREF clrOldText = pDC->SetTextColor (m_clrBarText != (COLORREF) -1 ? m_clrBarText : CBCGPVisualManager::GetInstance ()->GetCaptionBarTextColor (this)); CFont* pOldFont = pDC->SelectObject ( m_hFont == NULL ? &globalData.fontRegular : CFont::FromHandle (m_hFont)); CRect rectButton = m_rectButton; rectButton.top = max(rectClient.top + 1, rectButton.top); rectButton.bottom = min(rectClient.bottom - 1, rectButton.bottom); OnDrawButton (pDC, rectButton, m_strBtnText, m_bBtnEnabled); OnDrawText (pDC, m_rectDrawText, m_strText); if (!m_rectImage.IsRectEmpty ()) { OnDrawImage (pDC, m_rectImage); } if (!m_rectClose.IsRectEmpty ()) { COLORREF clrText = CBCGPVisualManager::GetInstance ()->OnFillCaptionBarButton (pDC, this, m_rectClose, m_bIsCloseBtnPressed, m_bIsCloseBtnHighlighted, FALSE, FALSE, TRUE); CBCGPVisualManager::GetInstance ()->OnDrawCaptionBarCloseButton(pDC, this, m_rectClose, m_bIsCloseBtnPressed, m_bIsCloseBtnHighlighted, clrText); CBCGPVisualManager::GetInstance ()->OnDrawCaptionBarButtonBorder (pDC, this, m_rectClose, m_bIsCloseBtnPressed, m_bIsCloseBtnHighlighted, FALSE, FALSE, TRUE); } pDC->SelectObject (pOldFont); pDC->SetTextColor (clrOldText); pDC->SetBkMode (nOldBkMode); }
void CProgressCtrlST::OnPaint() { // If there is no bitmap loaded if (m_hBitmap == NULL) { CProgressCtrl::OnPaint(); return; } // if CRect rcCtrl; DWORD dwStyle = 0; BOOL bVertical = FALSE; float f = 0; int nPercentage = 0; HDC hdcMem = NULL; HDC hdcTemp = NULL; HBITMAP hOldBitmap = NULL; HBITMAP hbmpTemp = NULL; HBITMAP hOldTempBitmap = NULL; CPaintDC dc(this); GetClientRect(rcCtrl); dwStyle = GetStyle(); bVertical = (dwStyle & PBS_VERTICAL) == PBS_VERTICAL; // Has border ? if ((dwStyle & WS_BORDER) == WS_BORDER) { CBrush brBtnShadow(RGB(0, 0, 0)); dc.FrameRect(rcCtrl, &brBtnShadow); rcCtrl.DeflateRect(1, 1); } // if rcCtrl.DeflateRect(1, 1); hdcMem = ::CreateCompatibleDC(dc.m_hDC); // Select bitmap hOldBitmap = (HBITMAP)::SelectObject(hdcMem, m_hBitmap); // Create temporary DC & bitmap hdcTemp = ::CreateCompatibleDC(dc.m_hDC); hbmpTemp = ::CreateCompatibleBitmap(hdcMem, rcCtrl.Width(), rcCtrl.Height()); hOldTempBitmap = (HBITMAP)::SelectObject(hdcTemp, hbmpTemp); // Calculate control's percentage to draw nPercentage = (int)((100.0/m_nRange)*(abs(m_nLower)+m_nPos)); // Adjust rectangle to draw on screen if (bVertical) { f = ((float)(rcCtrl.Height())/100)*nPercentage; if ((rcCtrl.bottom - (int)f) < rcCtrl.top) rcCtrl.top += 1; else rcCtrl.top = rcCtrl.bottom - (int)f; } // if else { f = ((float)(rcCtrl.Width())/100)*nPercentage; if ((rcCtrl.left + (int)f) > rcCtrl.right) rcCtrl.right -= 1; else rcCtrl.right = rcCtrl.left + (int)f; } // else // Tile the bitmap into the temporary rectangle TileBitmap(hdcTemp, hdcMem, rcCtrl); // Copy from temporary DC to screen (only the percentage rectangle) if (rcCtrl.IsRectEmpty() == FALSE) ::BitBlt(dc.m_hDC, rcCtrl.left, rcCtrl.top, rcCtrl.Width(), rcCtrl.Height(), hdcTemp, 0, 0, SRCCOPY); CRect rcFullCtrl; GetClientRect(rcFullCtrl); OnDrawText(&dc, nPercentage, rcFullCtrl, rcCtrl, bVertical); // Restore old selected bitmaps ::SelectObject(hdcTemp, hOldTempBitmap); ::SelectObject(hdcMem, hOldBitmap); ::DeleteObject( hbmpTemp ); ::DeleteDC( hdcTemp ); ::DeleteDC( hdcMem ); } // End of OnPaint