资源简介
一个自绘的CListCtrlEx列表控件类,可以支持:
(1)设置奇数行背景颜色(默认白色)
(2)设置偶数行背景颜色(默认白色)
(3)设置热点行背景颜色(默认白色)
(4)设置选中行背景颜色(默认蓝色)
(5)设置奇数行文本颜色(默认黑色)
(6)设置偶数行文本颜色(默认黑色)
(7)设置热点行文本颜色(默认黑色)
(8)设置选中行文本颜色(默认黑色)
(9)点击列表头,对列表内的数据进行升序/降序排列
(10)双缓冲,解决了闪烁的问题

代码片段和文件信息
// ListCtrlEx.cpp : 实现文件
//
#include “stdafx.h“
#include “ListCtrlEx.h“
// CListCtrlEx
IMPLEMENT_DYNAMIC(CListCtrlEx CListCtrl)
/**
* 构造函数
*/
CListCtrlEx::CListCtrlEx()
{
m_hoverIndex = -1; // 当前热点项目索引
m_mouseTrack = true; // 追踪鼠标移动事件
m_if_hotLine = false; // 默认不开启热点行更换颜色
m_oddItemBkColor = 0xFFFFFF; // 奇数行背景颜色(默认白色)
m_evenItemBkColor = 0xFFFFFF; // 偶数行背景颜色(默认白色)
m_hoverItemBkColor = 0xFFFFFF; // 热点行背景颜色(默认白色)
m_selectItemBkColor = GetSysColor(COLOR_HIGHLIGHT); // 选中行背景颜色(默认蓝色)
m_oddItemTextColor = GetSysColor(COLOR_BTNTEXT); // 奇数行文本颜色(默认黑色)
m_evenItemTextColor = GetSysColor(COLOR_BTNTEXT); // 偶数行文本颜色(默认黑色)
m_hoverItemTextColor = GetSysColor(COLOR_BTNTEXT); // 热点行文本颜色(默认黑色)
m_selectItemTextColor = GetSysColor(COLOR_BTNTEXT); // 选中行文本颜色(默认黑色)
}
/**
* 析构函数
*/
CListCtrlEx::~CListCtrlEx()
{
}
BEGIN_MESSAGE_MAP(CListCtrlEx CListCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW &CListCtrlEx::OnNMCustomdraw)
ON_WM_MOUSEMOVE()
ON_WM_MOUSELEAVE()
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK &CListCtrlEx::OnLvnColumnclick)
END_MESSAGE_MAP()
/**
* 排序回调函数
*/
static int CALLBACK SortFunction(LPARAM lParam1 LPARAM lParam2 LPARAM lParamSort)
{
CString &lp1 = *((CString *)lParam1);
CString &lp2 = *((CString *)lParam2);
int &sort = *(int *)lParamSort;
if (sort == 0)
return lp1.CompareNoCase(lp2);
else
return lp2.CompareNoCase(lp1);
}
/**
* 鼠标在控件区域上移动时
*/
void CListCtrlEx::onmousemove(UINT nFlags CPoint point)
{
if(m_if_hotLine == true) {
// 获取鼠标当前在哪一行上
int newIndex; // 当前鼠标的一行
int oldIndex; // 记录原来的一行(也就是离开前的那一行)
newIndex = HitTest(point);
if(newIndex != m_hoverIndex) {
CRect rc;
oldIndex = m_hoverIndex;
m_hoverIndex = newIndex;
// 刷新离开后的那一块区域
if(oldIndex != -1) {
GetItemRect(oldIndex &rc LVIR_BOUNDS);
InvalidateRect(&rc);
}
// 刷新来到新的一块的区域
if(m_hoverIndex != -1) {
GetItemRect(m_hoverIndex &rc LVIR_BOUNDS);
InvalidateRect(&rc);
}
}
// 鼠标要追踪WM_MOUSELEAVE事件
if (m_mouseTrack) {
TRACKMOUSEEVENT csTME;
csTME.cbSize = sizeof(csTME);
csTME.dwFlags = TME_LEAVE; // 指定要追踪的事件
csTME.hwndTrack = m_hWnd; // 指定要追踪的窗口
::_TrackMouseEvent(&csTME); // 开启Windows的WM_MOUSELEAVE事件支持
m_mouseTrack = false; // 若已经追踪,则停止追踪
}
}
CListCtrl::onmousemove(nFlags point);
}
/**
* 鼠标离开控件区域时
*/
void CListCtrlEx::onmouseleave()
{
if(m_if_hotLine == true) {
// 开始追踪
m_mouseTrack = true;
if(m_hoverIndex != -1) {
CRect rc;
GetItemRect(m_hoverIndex&rcLVIR_BOUNDS);
InvalidateRect(&rc);
m_hoverIndex = -1;
m_mouseTrack = true;
}
}
CListCtrl::onmouseleave();
}
/**
* 擦除背景
*/
BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC)
{
return FALSE;
}
/**
* 绘画
*/
void CListCtrlEx::OnPaint()
{
CPai
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7673 2014-05-03 20:20 ListCtrlEx\ListCtrlEx.cpp
文件 1449 2014-05-03 14:04 ListCtrlEx\ListCtrlEx.h
目录 0 2014-05-03 20:34 ListCtrlEx
----------- --------- ---------- ----- ----
9122 3
- 上一篇:仿QQ面板控件和QQ2009面板类似
- 下一篇:西华大学应用密码学期末考试
相关资源
- 基于MFC扩展CListCtrl子项显示图片并叠
- 黑白棋(带简单AI)
- MFC程序-碰撞的小球
-
Cme
taFileDC的使用示例 - ado数据库MFC图书管理系统vs2010
- mfc单文档窗体画线与写字
- [免费]MFC制作目录树
- MFC读三维模型obj文件
- 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 程序判断离散数学中命题公式
- MFC控件动态拖动
- MFC中OpenGL面和体的绘制以及动画效果
- c MFC 画多边形
- RSA AES DES ECC加密算法源码
- 可编辑的CListctrl 支持CEDIT文本框,C
- Microsoft基本类库 (MFC)(C 库)
- vc利用MFC底层开发的二维GIS管理软件,
- (MFC) 时钟日期程序
- 一个基于MFC的GridCtrl,提供类似Excel的
- 用MFC实现简单的画图功能
- MFC绘图小软件源代码(可当VC大作业用
- 基于MFC的文件目录树的对话框实现代
- CListCtrlExDemo.rar
- VC 6.0 MFC做画图软件
- 空间后方交会MFC版,C 源代码
- 图像缩放(MFC)有详细的实现过程
- 一个mfc前端显示秒表
- 基于C 的简易FTP客户端(带源码)
- C (MFC)华容道自动求解
评论
共有 条评论