資源簡介
重寫的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?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
評論
共有 條評論