1

我有一个列表框CListBox,我需要根据某些条件在其中指定单个列表项的颜色。我怎样才能做到这一点。我正在运行 VS2005。该应用程序是一个基于 WTL 对话框的应用程序。

4

2 回答 2

2

您可以创建自己的列表框(例如:CColorListBox)

颜色列表框.h

class CColorListBox : public CListBox
{
// Construction
public:
    CColorListBox();

// Attributes
public:

// Operations
public:

    int AddString( LPCTSTR lpszItem, COLORREF rgb);
    int InsertString( int nIndex, LPCTSTR lpszItem, COLORREF rgb);
// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CColorListBox)
    public:
    virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    //}}AFX_VIRTUAL

// Implementation
public:
    virtual ~CColorListBox();

    // Generated message map functions
protected:
    //{{AFX_MSG(CColorListBox)
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()
};

颜色列表框.cpp

这是一个想法不确切的代码............

int CColorListBox::AddString( LPCTSTR lpszItem,COLORREF rgb )
{
    int item = AddString(lpszItem);
    if(item >=0)
        SetItemData(item,rgb);
    return item;
}

int CColorListBox::InsertString( int nIndex, LPCTSTR lpszItem, COLORREF rgb)
{
    int item = ((CListBox*)this)->InsertString(nIndex,lpszItem);
    if(item >=0)
        SetItemData(item,rgb);
    return item;

}

void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpdis) 
{

}
于 2012-10-09T13:12:19.390 回答
0

这就是我在ListViewCtrl.

我写了一个类来扩展CListViewCtrl.

class CListViewCtrlEx: public  CWindowImpl<CListViewCtrlEx, CListViewCtrl>, public CCustomDraw<CListViewCtrlEx> 
{
public:
 BEGIN_MSG_MAP(CListViewCtrlEx)
  MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)  
  CHAIN_MSG_MAP_ALT(CCustomDraw<CListViewCtrlEx>, 1)
  DEFAULT_REFLECTION_HANDLER()
 END_MSG_MAP()

 LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL  bHandled);
 DWORD OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW lpNMCustomDraw);
 DWORD OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW lpNMCustomDraw);  
 void ForceMeasureItemMessage(); 
 void DeleteItem(LPDELETEITEMSTRUCT /*lpDeleteItemStruct*/);
 BOOL DeleteItem(int nItem); 
 void GetCellRect(int header_column, const CRect& item_rect, CRect& cell_rect); 
};

完整的代码在这里

于 2012-11-02T07:31:26.713 回答