ClistCtrl 하위 클래스

얼마 전에 계속 사용했던 인터넷의 한 종류인데 데이터의 양이 많아진 후에 인터페이스가 매우 끊겼다.인터넷에는 적합하지 않은 것이 많아서 이틀 동안 연구를 했는데 (너무 느리다, 자신이 너무 멍청하다) 이런 종류를 썼는데 기능이 많지 않아서 초보자가 공부하기에 적합하다.
MyList.h
///////////////////////////////////////////////////////////////////////////
//CListCtrl       
//       :
//1、       
//2、          
//3、        
//  :    CListCtrl    
//          ,                
//         ,   Windows     ,        
//       ,           ,           ,      
//        ,     ,    ,    。
//        ,          
//by l0g1n-------2012 6 12    17:44     QQ:519710 91
///////////////////////////////////////////////////////////////////////////
#pragma once
// CMyList
class CMyList : public CListCtrl
{
	DECLARE_DYNAMIC(CMyList)

public:
	CMyList();
	virtual ~CMyList();

protected:
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
	//        
	CImageList* SetImageList(CImageList *pImageList);
	//    id
	BOOL SetItemImageId(int nItem,int nImageId);
	//    ,       
	int InsertItem(int nItem,LPCTSTR lpText,COLORREF fontcolor=RGB(0,0,0));
};
MyList.cpp
///////////////////////////////////////////////////////////////////////////
//CListCtrl       
//       :
//1、       
//2、          
//3、        
//  :    CListCtrl    
//          ,                
//         ,   Windows     ,        
//       ,           ,           ,      
//        ,     ,    ,    。
//        ,          
//by l0g1n-------2012 6 12    17:44     QQ:519710391
///////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ListControlDemo.h"
#include "MyList.h"

// CMyList

IMPLEMENT_DYNAMIC(CMyList, CListCtrl)

CMyList::CMyList()
{
}

CMyList::~CMyList()
{
}

BEGIN_MESSAGE_MAP(CMyList, CListCtrl)
	ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CMyList::OnNMCustomdraw)
END_MESSAGE_MAP()

CMap<DWORD , DWORD& , COLORREF , COLORREF&> MapItemColor;

void CMyList::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;

	if (lplvcd->nmcd.dwDrawStage == CDDS_PREPAINT)
	{
	    *pResult = CDRF_NOTIFYITEMDRAW;
	}
    else if (lplvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT)
	{
	    *pResult = CDRF_NOTIFYSUBITEMDRAW;
	}
    else if (lplvcd->nmcd.dwDrawStage == (CDDS_ITEMPREPAINT | CDDS_SUBITEM))
    {
		COLORREF ItemColor;
		if(MapItemColor.Lookup((lplvcd->nmcd.dwItemSpec), ItemColor))
		{
                //lplvdr->clrText = RGB(0,0,0);//ItemColor;
				lplvcd->clrText = ItemColor;
                *pResult = CDRF_DODEFAULT;
        }
	}
}
// CMyList       

//        
CImageList* CMyList::SetImageList(CImageList *pImageList)
{
	return CListCtrl::SetImageList(pImageList,LVSIL_SMALL);
}
//    id
BOOL CMyList::SetItemImageId(int nItem,int nImageId)
{
	return CListCtrl::SetItem(nItem,0,LVIF_IMAGE,NULL,nImageId,0,0,0);
}
//    ,       
int CMyList::InsertItem(int nItem,LPCTSTR lpText,COLORREF fontcolor)
{
	const int IDX = CListCtrl::InsertItem(nItem, lpText);
	//    
	DWORD iItem=(DWORD)nItem;
	MapItemColor.SetAt(iItem, fontcolor);
	return IDX;
}

좋은 웹페이지 즐겨찾기