www.pudn.com > colortable.zip > ColorList.cpp


/***************************************************************************** 
*           Change Log 
*  Date     | Change 
*-----------+----------------------------------------------------------------- 
* 13-Jan-02 | Created 
*****************************************************************************/ 
// ColorList.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "colors.h" 
#include "ColorList.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CColorList 
 
CColorList::CColorList() 
{ 
} 
 
CColorList::~CColorList() 
{ 
} 
 
 
BEGIN_MESSAGE_MAP(CColorList, CListBox) 
	//{{AFX_MSG_MAP(CColorList) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CColorList message handlers 
 
void CColorList::DrawItem(LPDRAWITEMSTRUCT dis)  
   { 
    CRect r = dis->rcItem; 
    CDC * dc = CDC::FromHandle(dis->hDC); 
    CBrush br; 
    COLORREF txcolor; 
    COLORREF bkcolor; 
 
    int saved = dc->SaveDC(); 
 
    CString temp(_T("255,255,255   ")); 
    CSize sz = dc->GetTextExtent(temp); 
     
    if(dis->itemState & ODS_SELECTED) 
       { /* selected */ 
	if(::GetFocus() == m_hWnd) 
	   { /* has focus */ 
	    bkcolor = ::GetSysColor(COLOR_HIGHLIGHT); 
	    txcolor = ::GetSysColor(COLOR_HIGHLIGHTTEXT); 
	   } /* has focus */	     
	else 
	   { /* no focus */ 
	    bkcolor = ::GetSysColor(COLOR_3DFACE); 
	    txcolor = ::GetSysColor(COLOR_WINDOWTEXT); 
	   } /* no focus */ 
       } /* selected */ 
    else 
       { /* unselected */ 
	if(dis->itemState & (ODS_DISABLED | ODS_GRAYED)) 
	   txcolor = ::GetSysColor(COLOR_GRAYTEXT); 
	else 
	   txcolor = ::GetSysColor(COLOR_WINDOWTEXT); 
 
	bkcolor = ::GetSysColor(COLOR_WINDOW); 
       } /* unselected */ 
 
    dc->SetBkColor(bkcolor); 
    dc->SetTextColor(txcolor); 
 
    CRect text = r; 
    text.right = sz.cx; 
    dc->FillSolidRect(&text, bkcolor); 
 
    if(dis->itemID != (UINT)-1  
       && (dis->itemState & (ODS_DISABLED | ODS_GRAYED)) == 0) 
       { /* has item */ 
	COLORREF c = (COLORREF)dis->itemData; 
	CRect color = r; 
	color.left = sz.cx; 
	dc->FillSolidRect(&color, c); 
 
	CString s; 
	s.Format(_T("%d,%d,%d"), GetRValue(c), GetGValue(c), GetBValue(c)); 
	dc->SetBkMode(TRANSPARENT); 
 
	dc->TextOut(r.left, r.top, s); 
	 
       } /* has item */ 
 
    if(dis->itemState & ODS_FOCUS && dis->itemAction != ODA_SELECT) 
       dc->DrawFocusRect(&r); 
 
    dc->RestoreDC(saved); 
   }