资源简介
重写的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
相关资源
- LINUX下命令行界面的C语言细胞游戏
- 用C语言进行数字图像处理
- VC++实现CMD命令执行与获得返回信息
- 使用wxWidgets进行跨平台程序开发
- 国外很强的迷你四轴飞行器
- 颜色识别形状识别STM103嵌入式代码
- 易语言png 多行多列切图
- 银行家算法分配资源的模拟实现(m
- c++的飞行鸟游戏
- QT 计算文件夹内所有代码行数
- VC++6.0番茄西红柿VAXvirsual assist X完美破
- 基于LPC2132的蛇形机器人前端执行机构
- 一个C++实现的源代码行数统计工具
- 水晶报表Crystal Reports运行环境CRRunti
- 银行计算机专业笔试题目+答案
- 电子宠物C++完整代码可直接运行
- 最后一战OL手游 全套完整源码+资源,
- C语言数据结构银行客户排队
- C语言实现的银行家算法 做了界面
- filtfilt C语言实现,可直接运行验证
- 识别魔方颜色
- AES-128-CBC算法C语言源码已经修改,可
- 自绘CListCtrl聊天列表MFC
- 经典开源A星算法含完整运行程序
- 银行账户管理系统C++
- C++语言实现一些基本算法(两点距离
- 操作系统课程设计(银行家算法)附
- MFC编程凯撒密码
- C++ AMP 用Visual C++加速大规模并行计算
- c语言学生管理系统,可运行,有报告
评论
共有 条评论