#include "stdafx.h"
|
#include "ListCtrlEx.h"
|
|
|
CListCtrlEx::CListCtrlEx()
|
{
|
}
|
|
|
CListCtrlEx::~CListCtrlEx()
|
{
|
}
|
BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)
|
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CListCtrlEx::OnNMCustomdraw)
|
END_MESSAGE_MAP()
|
|
|
void CListCtrlEx::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
|
{
|
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
|
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
|
*pResult = CDRF_DODEFAULT;
|
|
NMLVCUSTOMDRAW * lplvdr = (NMLVCUSTOMDRAW*)pNMHDR;
|
NMCUSTOMDRAW &nmcd = lplvdr->nmcd;
|
switch (lplvdr->nmcd.dwDrawStage)//ÅжÏ״̬
|
{
|
case CDDS_PREPAINT:
|
{
|
*pResult = CDRF_NOTIFYITEMDRAW;
|
break;
|
}
|
case CDDS_ITEMPREPAINT://Èç¹ûΪ»ITEM֮ǰ¾ÍÒª½øÐÐÑÕÉ«µÄ¸Ä±ä
|
{
|
// ¸ù¾ÝÔÚ SetItemColor(DWORD iItem, COLORREF color) ÉèÖõÄ
|
// ITEMºÅºÍCOLORREF ÔÚÃþ°åÖвéÕÒ£¬È»ºó½øÐÐÑÕÉ«¸³Öµ¡£
|
/*
|
LISTITEMEX_9& itemex = m_listItemColor.GetAt(m_listItemColor.FindIndex(nmcd.dwItemSpec));
|
lplvdr->clrText = itemex.colText;
|
lplvdr->clrTextBk = itemex.colTextBk;
|
*pResult = CDRF_DODEFAULT;
|
*/
|
|
if (nmcd.dwItemSpec % 2 == 0) {
|
lplvdr->clrText = RGB(0, 0, 0);
|
lplvdr->clrTextBk = RGB(235, 235, 235);
|
*pResult = CDRF_DODEFAULT;
|
}
|
else {
|
lplvdr->clrText = RGB(0, 0, 0);
|
lplvdr->clrTextBk = RGB(255, 255, 255);
|
*pResult = CDRF_DODEFAULT;
|
}
|
|
|
break;
|
}
|
}
|
|
}
|
|
void CListCtrlEx::SetItemColor(DWORD_PTR iItem, COLORREF TextColor, COLORREF TextBkColor)
|
{
|
if (iItem >= m_listItemColor.GetSize()) return;
|
LISTITEMEX_9& itemex = m_listItemColor.GetAt(m_listItemColor.FindIndex(iItem));
|
itemex.colText = TextColor;
|
itemex.colTextBk = TextBkColor;
|
this->RedrawItems(iItem, iItem); // ÖØÐÂȾɫ
|
UpdateWindow();
|
}
|
|
|
LRESULT CListCtrlEx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
|
{
|
int nRet = CListCtrl::WindowProc(message, wParam, lParam);
|
if (message == LVM_INSERTITEM) {
|
if (nRet != -1) {
|
LISTITEMEX_9 itemex = {RGB(0,0,0), RGB(255, 255, 255)};
|
LVITEM* p = (LVITEM*)lParam;
|
m_listItemColor.InsertBefore(m_listItemColor.FindIndex(p->iItem), itemex);
|
}
|
}
|
else if (message == LVM_DELETEITEM) {
|
if (nRet != 0) {
|
m_listItemColor.RemoveAt(m_listItemColor.FindIndex(wParam));
|
}
|
}
|
else if (message == LVM_DELETEALLITEMS) {
|
if (nRet != 0) {
|
m_listItemColor.RemoveAll();
|
}
|
}
|
|
return nRet;
|
}
|