//***************************************************************************************** void CBCGPColorButton::OnSysColorChange() { CBCGPButton::OnSysColorChange(); RebuildPalette (NULL); Invalidate (); UpdateWindow (); }
//***************************************************************************************** void CBCGPColorButton::SetPalette (CPalette* pPalette) { if (m_Colors.GetSize () != 0) { m_Colors.SetSize (0); m_Colors.FreeExtra (); } CBCGPColorBar::InitColors (pPalette, m_Colors); RebuildPalette (pPalette); }
void CMyColorButton::OnDraw(CDC* pDC, const CRect& rect, UINT uiState) { ASSERT_VALID(pDC); if (m_pPalette == NULL) { RebuildPalette(NULL); } CPalette* pCurPalette = pDC->SelectPalette(m_pPalette, FALSE); pDC->RealizePalette(); CSize sizeArrow = CMenuImages::Size(); CRect rectColor = rect; rectColor.right -= sizeArrow.cx + nImageHorzMargin; CRect rectArrow = rect; rectArrow.left = rectColor.right; COLORREF color = m_Color; //--------------------------- // Draw current color and color's value: //--------------------------- CString strColor; color==(COLORREF)-1?strColor=_T("无"):strColor.Format(_T("0x%06x"),color); rectColor.right = rectColor.left + rectColor.Height(); CRect rectText = rect; rectText.left = rectColor.right; rectText.right = rectArrow.left; CFont* pOldFont=(CFont *)pDC->SelectStockObject(DEFAULT_GUI_FONT); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(afxGlobalData.clrBtnText); pDC->DrawText(strColor, rectText, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS); pDC->SelectObject(pOldFont); //---------------- // Draw color box: //---------------- rectColor.DeflateRect(2, 2); pDC->Draw3dRect(rectColor, afxGlobalData.clrBtnHilite, afxGlobalData.clrBtnHilite); rectColor.DeflateRect(1, 1); pDC->Draw3dRect(rectColor, afxGlobalData.clrBtnDkShadow, afxGlobalData.clrBtnDkShadow); rectColor.DeflateRect(1, 1); if (color != (COLORREF)-1 &&(uiState & ODS_DISABLED) == 0) { if (afxGlobalData.m_nBitsPerPixel == 8) // 256 colors { ASSERT_VALID(m_pPalette); color = PALETTEINDEX(m_pPalette->GetNearestPaletteIndex(color)); } CBrush br(color); pDC->FillRect(rectColor, &br); } //---------------------- // Draw drop-down arrow: //---------------------- CRect rectArrowWinXP = rectArrow; rectArrowWinXP.DeflateRect(2, 2); if (!m_bWinXPTheme || !CMFCVisualManager::GetInstance()->DrawComboDropButtonWinXP(pDC, rectArrowWinXP, (uiState & ODS_DISABLED), m_bPushed, m_bHighlighted)) { pDC->FillRect(rectArrow, &afxGlobalData.brBtnFace); CMenuImages::Draw(pDC, CMenuImages::IdArrowDownLarge, rectArrow, (uiState & ODS_DISABLED) ? CMenuImages::ImageGray : CMenuImages::ImageBlack); pDC->Draw3dRect(rectArrow, afxGlobalData.clrBtnLight, afxGlobalData.clrBtnDkShadow); rectArrow.DeflateRect(1, 1); pDC->Draw3dRect(rectArrow, afxGlobalData.clrBtnHilite, afxGlobalData.clrBtnShadow); } if (pCurPalette != NULL) { pDC->SelectPalette(pCurPalette, FALSE); } }
//***************************************************************************************** void CBCGPColorButton::OnDraw (CDC* pDC, const CRect& rect, UINT uiState) { ASSERT_VALID (pDC); if (m_pPalette == NULL) { RebuildPalette (NULL); } CPalette* pCurPalette = pDC->SelectPalette (m_pPalette, FALSE); pDC->RealizePalette(); CSize sizeArrow = CBCGPMenuImages::Size (); CRect rectColor = rect; rectColor.right -= sizeArrow.cx + nImageHorzMargin; CRect rectArrow = rect; rectArrow.left = rectColor.right; COLORREF color = m_Color; if (color == (COLORREF) -1) // Automatic { //--------------------------- // Draw automatic text label: //--------------------------- color = m_ColorAutomatic; if (!m_strAutoColorText.IsEmpty ()) { rectColor.right = rectColor.left + rectColor.Height (); CRect rectText = rect; rectText.left = rectColor.right; rectText.right = rectArrow.left; CFont* pOldFont = SelectFont (pDC); ASSERT(pOldFont != NULL); pDC->SetBkMode (TRANSPARENT); pDC->SetTextColor (globalData.clrBtnText); UINT nFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS; if (m_bOnGlass) { CBCGPVisualManager::GetInstance ()->DrawTextOnGlass (pDC, m_strAutoColorText, rectText, nFormat, 0); } else { pDC->DrawText (m_strAutoColorText, rectText, nFormat); } pDC->SelectObject (pOldFont); } } //---------------- // Draw color box: //---------------- rectColor.DeflateRect (2, 2); if (m_bOnGlass) { CBCGPDrawManager dm (*pDC); dm.DrawRect (rectColor, (COLORREF)-1, globalData.clrBtnDkShadow); } else { pDC->Draw3dRect (rectColor, globalData.clrBtnHilite, globalData.clrBtnHilite); rectColor.DeflateRect (1, 1); pDC->Draw3dRect (rectColor, globalData.clrBtnDkShadow, globalData.clrBtnDkShadow); } rectColor.DeflateRect (1, 1); if (color != (COLORREF)-1 && (uiState & ODS_DISABLED) == 0) { if (globalData.m_nBitsPerPixel == 8) // 256 colors { ASSERT_VALID (m_pPalette); color = PALETTEINDEX (m_pPalette->GetNearestPaletteIndex (color)); } if (m_bOnGlass) { CBCGPDrawManager dm (*pDC); dm.DrawRect (rectColor, color, (COLORREF)-1); } else { CBrush br (color); pDC->FillRect (rectColor, &br); } } //---------------------- // Draw drop-down arrow: //---------------------- CRect rectArrowWinXP = rectArrow; rectArrowWinXP.DeflateRect (2, 2); if (!m_bWinXPTheme || !CBCGPVisualManager::GetInstance ()->DrawComboDropButtonWinXP ( pDC, rectArrowWinXP, (uiState & ODS_DISABLED), m_bPushed, m_bHighlighted)) { pDC->FillRect (rectArrow, &globalData.brBtnFace); CBCGPMenuImages::Draw (pDC, CBCGPMenuImages::IdArowDownLarge, rectArrow, (uiState & ODS_DISABLED) ? CBCGPMenuImages::ImageGray : CBCGPMenuImages::ImageBlack); pDC->Draw3dRect (rectArrow, globalData.clrBtnLight, globalData.clrBtnDkShadow); rectArrow.DeflateRect (1, 1); pDC->Draw3dRect (rectArrow, globalData.clrBtnHilite, globalData.clrBtnShadow); } if (pCurPalette != NULL) { pDC->SelectPalette (pCurPalette, FALSE); } }