void CColorPaletteButton::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // Do not call CButton::OnPaint() for painting messages COLORREF buttonColor = (m_appPalette.isPaletteDevice() ? PALETTEINDEX(m_appPalette.getEditIndex()) : m_appPalette.getEditColor() ); TRACE("CColorPaletteButton::OnPaint() - buttonColor = %08x\n",buttonColor); CRect rect; GetClientRect(&rect); CPen penHighlight(PS_SOLID,1,GetSysColor(COLOR_BTNHIGHLIGHT)); CPen* oldPen = dc.SelectObject(&penHighlight); dc.MoveTo(rect.left,rect.bottom); dc.LineTo(rect.right,rect.bottom); dc.LineTo(rect.right,rect.top - 1); CPen penShadow(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW)); dc.SelectObject(&penShadow); dc.MoveTo(rect.left,rect.bottom - 1); dc.LineTo(rect.left,rect.top); dc.LineTo(rect.right,rect.top); CPen penFace(PS_SOLID,1,GetSysColor(COLOR_BTNFACE)); dc.SelectObject(&penFace); dc.MoveTo(rect.left + 1,rect.bottom - 1); dc.LineTo(rect.right - 1,rect.bottom - 1); dc.LineTo(rect.right - 1,rect.top); CPen penDarkShadow(PS_SOLID,1,GetSysColor(COLOR_3DDKSHADOW)); dc.SelectObject(&penDarkShadow); dc.MoveTo(rect.left + 1,rect.bottom - 2); dc.LineTo(rect.left + 1,rect.top + 1); dc.LineTo(rect.right - 1,rect.top + 1); dc.SelectObject(oldPen); m_appPalette.pushPalette(&dc); CBrush brush; brush.CreateSolidBrush(buttonColor); CBrush* oldBrush = dc.SelectObject(&brush); rect.top += 2; rect.left += 2; rect.bottom -= 1; rect.right -= 1; dc.SelectObject(&brush); dc.FillRect(&rect,&brush); dc.SelectObject(oldBrush); m_appPalette.popPalette(&dc); }
void CCJFlatHeaderCtrl::DrawFlatBorder() { CDC* pDC = GetDC(); CRect rci; GetWindowRect(&rci); ScreenToClient(&rci); // Cover up thick 3D border. pDC->Draw3dRect(rci, ::GetSysColor(COLOR_3DFACE), ::GetSysColor(COLOR_3DFACE)); rci.DeflateRect(1,1); pDC->Draw3dRect(rci, ::GetSysColor(COLOR_3DFACE), ::GetSysColor(COLOR_3DFACE)); // Draw flat style border around entire header. rci.InflateRect(1,1); pDC->Draw3dRect(rci, ::GetSysColor(COLOR_3DHILIGHT), ::GetSysColor(COLOR_3DSHADOW)); // Create the pens for further cover-up. CPen penLite(PS_SOLID, 1, ::GetSysColor(COLOR_3DHILIGHT)); CPen penShad(PS_SOLID, 1, ::GetSysColor(COLOR_3DSHADOW)); CPen penFace(PS_SOLID, 1, ::GetSysColor(COLOR_3DFACE)); CPen *pOldPen = pDC->SelectObject( &penLite ); pDC->SelectObject(&penFace); pDC->MoveTo(rci.right-1, 2); pDC->LineTo(rci.right-1, rci.bottom-2); // Set up the header item struct. HD_ITEM hdi; memset (&hdi, 0, sizeof(HD_ITEM)); hdi.fmt = HDF_STRING | HDF_LEFT | HDF_OWNERDRAW; hdi.mask = HDI_WIDTH | HDI_TEXT | HDI_FORMAT; int cx = 0; // For each header item found, do further cover up. for (int i = 0; i < GetItemCount(); ++i) { GetItem(i, &hdi); cx += hdi.cxy; pDC->SelectObject(&penShad); pDC->MoveTo(cx, 2); pDC->LineTo(cx, rci.bottom-2); pDC->SelectObject(&penLite); pDC->MoveTo(cx+1, 2); pDC->LineTo(cx+1, rci.bottom-2); pDC->SelectObject(&penFace); pDC->MoveTo(cx-1, 2); pDC->LineTo(cx-1, rci.bottom-2); pDC->SelectObject(&penFace); pDC->MoveTo(cx-2, 2); pDC->LineTo(cx-2, rci.bottom-2); } // Restore the pen and release device context. pDC->SelectObject( pOldPen ); ReleaseDC(pDC); }