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);
}