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);
}
Exemple #2
0
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);
}