资源简介
重写的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
相关资源
- 用MFC画直线椭圆矩型可选择线条颜色
- MFC交通灯控制车辆运行的模拟程序
- 矩阵转置的并行算法mpi实现
- C++调用其它exe执行文件.
- 用c++编写的一个学生信息管理系统,
- c++运行程序缺少mex.h
- MFC GroupBox自绘控件,可以方便改变边
- 操作系统C语言实现银行家算法,键盘
- 飞行弹道计算C语言
- 磁盘调度算法模拟软件,完整课程设
- 读取3ds文件模拟飞机飞行
- 串口调试工具 带自动换行功能
- Visual Studio 2013开发MFC程序对Excel 2010进
- 遗传算法求解中国旅行商问题C语言
- 基于c语言的银行业务模拟
- 聊天+传送文件+设置字体及颜色vs201
- 旅行商问题 最近插入法
- VC++ 实现增大可执行文件的体积 自
- DES算法CBC运行模式实现
- OPENGL 画颜色渐变六角星+旋转
- 极其强大的C语言学生成绩管理系统(
- 演示一个不断旋转、缩放和移动的正
- 对26个英文字母进行哈夫曼编码
- C++AGV 路径规划与运行仿真程序
- 操作系统课程设计银行家算法C语言
- C++从YUV420序列中获得指定一帧数据(
- 华邦串行FLASH W25X40 读写程序范例,
- 银行家算法C实现
- 银行取号系统模拟,模拟窗口排队,
- 飞行棋c++源码初学者学习用
评论
共有 条评论