void CDxMonthPicker::DrawButtons(CDCHandle dc) { if (m_btnToday->m_bVisible) { dc.FillSolidRect(m_btnToday->m_rcButton, GetSysColor(COLOR_BTNFACE)); CRect rcButtonX = m_btnToday->m_rcButton; rcButtonX.DeflateRect(1, 1, 1, 1); if (m_btnToday->m_bPressed) { dc.Draw3dRect(m_btnToday->m_rcButton, GetSysColor(COLOR_BTNTEXT), GetSysColor(COLOR_BTNFACE)); dc.Draw3dRect(rcButtonX, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT)); } else { dc.Draw3dRect(m_btnToday->m_rcButton, GetSysColor(COLOR_BTNFACE), GetSysColor(COLOR_BTNTEXT)); dc.Draw3dRect(rcButtonX, GetSysColor(COLOR_3DHILIGHT), GetSysColor(COLOR_3DSHADOW)); } HFONT hFontOld = (HFONT)dc.SelectFont(CDxFontManager::GetSingleton().GetFont(DUIF_DEFAULTFONT)); CString strCaption = _T("Today"); dc.SetTextColor(RGB(0,0,0)); dc.DrawText(strCaption, strCaption.GetLength(), rcButtonX, DT_VCENTER | DT_CENTER | DT_SINGLELINE); } }
// This function is called every time the button border needs to be painted. // If the button is in standard (not flat) mode this function will NOT be called. // // Parameters: // [IN] pDC // Pointer to a CDC object that indicates the device context. // [IN] pRect // Pointer to a CRect object that indicates the bounds of the // area to be painted. // // Return value: // BTNST_OK // Function executed successfully. // DWORD CButtonST::OnDrawBorder(CDCHandle pDC, LPCRECT pRect) { if (m_bIsPressed) { pDC.Draw3dRect(pRect, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHILIGHT)); } else { pDC.Draw3dRect(pRect, ::GetSysColor(COLOR_BTNHILIGHT), ::GetSysColor(COLOR_BTNSHADOW)); } return BTNST_OK; } // End of OnDrawBorder
LRESULT CPreviewWindow::OnEraseBackground(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { CDCHandle dc = (HDC) wParam; RECT rc; GetClientRect(&rc); rc.bottom = rc.top + 21; dc.FillSolidRect(&rc, RGB(174, 169, 167)); GetClientRect(&rc); rc.top += 21; dc.Draw3dRect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, RGB(103, 99, 96), RGB(200, 199, 196)); CFontHandle oldFont = dc.SelectFont(AtlGetDefaultGuiFont()); dc.SetTextColor(RGB(0, 0, 0)); dc.SetBkMode(TRANSPARENT); const sChar *desc = "(no view item)"; frOpGraph::opMapIt it = g_graph->m_ops.find(m_client.m_curOp); if (it != g_graph->m_ops.end()) desc = it->second.plg->getDisplayName(); dc.TextOut(176, 3, desc); dc.SelectFont(oldFont); return 1; }
void CButtonST::DrawItem(UINT ctrlID, LPDRAWITEMSTRUCT lpDIS) { CDCHandle pDC = lpDIS->hDC; CPenHandle pOldPen; // Checkbox or Radiobutton style ? if (m_bIsCheckBox) { m_bIsPressed = (lpDIS->itemState & ODS_SELECTED) || m_nCheck; } // Normal button OR other button style ... else { m_bIsPressed = (lpDIS->itemState & ODS_SELECTED); } m_bIsFocused = (lpDIS->itemState & ODS_FOCUS) != 0; m_bIsDisabled = (lpDIS->itemState & ODS_DISABLED) != 0; CRect itemRect = lpDIS->rcItem; pDC.SetBkMode(TRANSPARENT); if (!m_bIsFlat) { if (m_bIsFocused || GetDefault()) { CBrush br; br.CreateSolidBrush(RGB(0,0,0)); pDC.FrameRect(&itemRect, br); itemRect.DeflateRect(1, 1); } } // Prepare draw... paint button background // Draw transparent? if (m_bDrawTransparent) { PaintBk(pDC); } else { OnDrawBackground(pDC, &itemRect); } // Draw pressed button if (m_bIsPressed) { if (m_bIsFlat) { if (m_bDrawBorder) { OnDrawBorder(pDC, &itemRect); } } else { CBrush brBtnShadow; brBtnShadow.CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW)); pDC.FrameRect(&itemRect, brBtnShadow); } } else // ...else draw non pressed button { CPen penBtnHiLight; // White CPen pen3DLight; // Light gray CPen penBtnShadow; // Dark gray CPen pen3DDKShadow; // Black penBtnHiLight.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_BTNHILIGHT)); // White pen3DLight.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_3DLIGHT)); // Light gray penBtnShadow.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_BTNSHADOW)); // Dark gray pen3DDKShadow.CreatePen(PS_SOLID, 0, ::GetSysColor(COLOR_3DDKSHADOW)); // Black if (m_bIsFlat) { if (m_bMouseOnButton && m_bDrawBorder) { pDC.Draw3dRect(itemRect, ::GetSysColor(COLOR_BTNHILIGHT), ::GetSysColor(COLOR_BTNSHADOW)); } } else { // Draw top-left borders // White line pOldPen = pDC.SelectPen(penBtnHiLight); pDC.MoveTo(itemRect.left, itemRect.bottom-1); pDC.LineTo(itemRect.left, itemRect.top); pDC.LineTo(itemRect.right, itemRect.top); // Light gray line pDC.SelectPen(pen3DLight); pDC.MoveTo(itemRect.left+1, itemRect.bottom-1); pDC.LineTo(itemRect.left+1, itemRect.top+1); pDC.LineTo(itemRect.right, itemRect.top+1); // Draw bottom-right borders // Black line pDC.SelectPen(pen3DDKShadow); pDC.MoveTo(itemRect.left, itemRect.bottom-1); pDC.LineTo(itemRect.right-1, itemRect.bottom-1); pDC.LineTo(itemRect.right-1, itemRect.top-1); // Dark gray line pDC.SelectPen(penBtnShadow); pDC.MoveTo(itemRect.left+1, itemRect.bottom-2); pDC.LineTo(itemRect.right-2, itemRect.bottom-2); pDC.LineTo(itemRect.right-2, itemRect.top); // pDC.SelectPen(pOldPen); } } // Read the button's title CString sTitle; int nLen = GetWindowTextLength(); int nRetLen = GetWindowText(sTitle.GetBufferSetLength(nLen), nLen + 1); CRect captionRect = lpDIS->rcItem; // Draw the icon if (m_csIcons[0].hIcon != 0) { DrawTheIcon(pDC, !sTitle.IsEmpty(), lpDIS->rcItem, captionRect, m_bIsPressed, m_bIsDisabled); } if (m_csBitmaps[0].hBitmap != 0) { pDC.SetBkColor(RGB(255,255,255)); DrawTheBitmap(pDC, !sTitle.IsEmpty(), lpDIS->rcItem, captionRect, m_bIsPressed, m_bIsDisabled); } // Write the button title (if any) if (!sTitle.IsEmpty()) { // Draw the button's title // If button is pressed then "press" title also if (m_bIsPressed && !m_bIsCheckBox) { captionRect.OffsetRect(1, 1); } // Center text CRect centerRect = captionRect; pDC.DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER | DT_CALCRECT); captionRect.OffsetRect((centerRect.Width() - captionRect.Width())/2, (centerRect.Height() - captionRect.Height())/2); pDC.SetBkMode(TRANSPARENT); if (m_bIsDisabled) { captionRect.OffsetRect(1, 1); pDC.SetTextColor(::GetSysColor(COLOR_3DHILIGHT)); pDC.DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER); captionRect.OffsetRect(-1, -1); pDC.SetTextColor(::GetSysColor(COLOR_3DSHADOW)); pDC.DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER); } else { if (m_bMouseOnButton || m_bIsPressed) { pDC.SetTextColor(m_crColors[BTNST_COLOR_FG_IN]); pDC.SetBkColor(m_crColors[BTNST_COLOR_BK_IN]); } else { pDC.SetTextColor(m_crColors[BTNST_COLOR_FG_OUT]); pDC.SetBkColor(m_crColors[BTNST_COLOR_BK_OUT]); } pDC.DrawText(sTitle, -1, captionRect, DT_WORDBREAK | DT_CENTER); } } if (!m_bIsFlat || (m_bIsFlat && m_bDrawFlatFocus)) { // Draw the focus rect if (m_bIsFocused) { CRect focusRect = itemRect; focusRect.DeflateRect(3, 3); pDC.DrawFocusRect(&focusRect); } } }
BOOL CDxDatePickerDay::DrawDay(CDCHandle dc) { // check this day item BOOL bThisMonthItem = FALSE; BOOL bNextMonthItem = FALSE; BOOL bPreviousMonthItem = FALSE; CDxMonthPicker* pControl = GetDatePicker(); CDxDatePickerMonth* pMonth = GetMonth(); COleDateTime dtDay = GetDate(); CRect rcDay = GetRect(); if (dtDay.GetYear() > pMonth->GetMonth().GetYear()) { bNextMonthItem = TRUE; } else if (dtDay.GetYear() < pMonth->GetMonth().GetYear()) { bPreviousMonthItem = TRUE; } else { // years the same if (dtDay.GetMonth() > pMonth->GetMonth().GetMonth()) bNextMonthItem = TRUE; else if (dtDay.GetMonth() < pMonth->GetMonth().GetMonth()) bPreviousMonthItem = TRUE; else // months the same bThisMonthItem = TRUE; } if (bPreviousMonthItem && !pMonth->GetShowDaysBefore()) return FALSE; if (bNextMonthItem && !pMonth->GetShowDaysAfter()) return FALSE; // apply settings to the DC dc.SetBkMode(TRANSPARENT); dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT)); dc.FillSolidRect(rcDay, GetSysColor(COLOR_WINDOW)); // change default drawing metrics if day is selected if (pControl->IsSelected(dtDay)) { dc.SetTextColor(GetSysColor(COLOR_WINDOW)); dc.FillSolidRect(rcDay, GetSysColor(COLOR_WINDOWTEXT)); } // make a text for drawing CString strText; strText.Format(_T("%i"), dtDay.GetDay()); // draw item content { // draw item text HFONT hFontOld = (HFONT)dc.SelectFont(CDxFontManager::GetSingleton().GetFont(DUIF_DEFAULTFONT)); dc.DrawText(strText, strText.GetLength(), &rcDay, DT_SINGLELINE | DT_VCENTER | DT_CENTER | DT_NOCLIP); } CRect rcFocus = rcDay; BOOL bToday = FALSE; // highlight today item if (IsToday(dtDay)) { dc.Draw3dRect(rcDay, GetSysColor(COLOR_HIGHLIGHT), GetSysColor(COLOR_HIGHLIGHT)); bToday = TRUE; } if (pControl->IsSelected(dtDay)) { if (!bToday) { dc.SetTextColor(0); dc.SetBkColor(RGB(255, 255, 255)); dc.DrawFocusRect(&rcFocus); } else { COLORREF clrFocus = GetSysColor(COLOR_HIGHLIGHT); clrFocus = clrFocus ^ RGB(255, 128, 128); rcFocus.DeflateRect(0, 0, 1, 1); CPen pen1; pen1.CreatePen(PS_DOT, 1, clrFocus); HPEN hOldPen = dc.SelectPen(pen1); dc.MoveTo(rcFocus.TopLeft()); dc.LineTo(rcFocus.right, rcFocus.top); dc.LineTo(rcFocus.right, rcFocus.bottom); dc.LineTo(rcFocus.left, rcFocus.bottom); dc.LineTo(rcFocus.left, rcFocus.top); dc.SelectPen(hOldPen); } } return TRUE; }