资源简介

重写的CListCtrl类,能改变行的颜色,能点击列标题后实现自动排序。同时包含VC2010下,CString转为Char*的技巧。类在VC6.0和VC2010下均编译通过。

资源截图

代码片段和文件信息

// MyListCtrl.cpp : implementation file
//

#include “stdafx.h“
#include “iJob.h“
#include “MyListCtrl.h“

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include 
CMap< DWORD  DWORD&  COLORREF  COLORREF& > MapItemColor;
/////////////////////////////////////////////////////////////////////////////
// CMyListCtrl

CMyListCtrl::CMyListCtrl()
{
m_bAsc = TRUE;
m_nSortCol = -1;
}

CMyListCtrl::~CMyListCtrl()
{
}


BEGIN_MESSAGE_MAP(CMyListCtrl CListCtrl)
//{{AFX_MSG_MAP(CMyListCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW OnNMCustomdraw)
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK OnColumnclick)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyListCtrl message handlers

void CMyListCtrl::SetItemColor(DWORD iItem COLORREF color)
{
//    m_iCurrentItem = iItem;
    //    m_CurrentColor = color;
    MapItemColor.SetAt(iItem color);//设置某行的颜色。

    this->RedrawItems(iItem iItem);//重新染色
    //this->SetCheck(iItem1);
    this->SetFocus();//设置焦点
    UpdateWindow();
}

void CMyListCtrl::OnNMCustomdraw(NMHDR *pNMHDR LRESULT *pResult)
{
    // TODO: Add your control notification handler code here
    *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之前就要进行颜色的改变
{
COLORREF ItemColor;
if(MapItemColor.Lookup(nmcd.dwItemSpec ItemColor))
//根据在SetItemColor(DWORD iItem COLORREF color) 设置的//ITEM号和COLORREF 在摸板中查找,然后进行颜色赋值。
{
//lplvdr->clrText = RGB(000);//ItemColor;
lplvdr->clrTextBk = ItemColor;
*pResult = CDRF_DODEFAULT;
}
}
break;
    }
}

int CALLBACK CMyListCtrl::Compare(LPARAM lParam1LPARAM lParam2LPARAM lParamData)
{
CMyListCtrl* pListCtrl=reinterpret_cast(lParamData);
//如果返回-1表示不进行排序
CString strItem1 strItem2; 
    LVFINDINFO info; 
int nIndex;
    info.flags = LVFI_PARAM; //设置为LVFI_PARAM,后面的FindItem才能有效 
    info.lParam = lParam1; //由item data(lParam1)得到对应的item text
    if ( (nIndex=pListCtrl->FindItem(&info)) != -1)
strItem1 = pListCtrl->GetItemText(nIndex pListCtrl->m_nSortCol);
info.lParam = lParam2;
    if ( (nIndex=pListCtrl->FindItem(&info)) != -1)
strItem2 = pListCtrl->GetItemText(nIndex pListCtrl->m_nSortCol);

// strItem1 = pListCtrl->GetItemText(lParam1 pListCtrl->m_nSortCol);
// strItem2 = pListCtrl->GetItemText(lParam2 pListCtrl->m_nSortCol);
strItem1.TrimRight();
strItem1.TrimLeft();
strItem2.TrimRight();
strItem2.TrimLeft();

int nCompare;
//比较大小必须区分数字、字符串
if( IsNumber(strItem1)==TRUE && IsNumber(strItem2)==TRUE )
{
int nNumber1nNumber2;
if (strItem1.GetLength()==0) 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4206  2011-10-22 20:52  MyListCtrl\MyListCtrl.cpp

     文件       1410  2011-10-22 18:33  MyListCtrl\MyListCtrl.h

     文件        531  2011-10-28 20:59  MyListCtrl\stdafx.cpp

     文件       1745  2012-01-13 14:46  MyListCtrl\stdafx.h

     目录          0  2012-01-13 14:46  MyListCtrl

----------- ---------  ---------- -----  ----

                 7892                    5


评论

共有 条评论