资源简介
一个自绘的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面板类似
- 下一篇:西华大学应用密码学期末考试
相关资源
- 简单多边形的屋脊线计算算法
- 蛐蛐V3.0.zip
- 原创鼠标连点器
- 数据库课程设计大作业-餐饮管理系统
- vc实现dicom读取与显示
- CListCtrl的使用
- 局域网聊天程序基于套接字
- 实现cgridlistctrlex,并使用鼠标响应事
- IBindStatusCallback子类
- 局域网聊天室资源百度云链接
- CListCtrl重绘,内嵌按钮等控件
- ClistCtrl中集成treeCtrl
- 进程调度的设计与实现图形界面实现
- VC树形控件 自己封装的树形控件拓展
- AUTO_CAD.rar
- 模拟POS机程序源码
-
实现透明窗口(使用Updatela
yeredWin - 可以实时变化的柱状图
- 功能强大的ClistCtrl类 更改单元格的颜
- PCL做界面程序代码
- 使用CAsyncSocket完成的客户端和服务端
- GDAL无缝图片拼接
- 树形可编辑listctrl
- Ntp客户端校时工具精简高效
- 鼠标光标 cur格式
- opengl绘制的三维汽车
- VC开发实现任务管理器
- CEdit控件重写类CEditList,输入自动提示
- png不规则窗口
- 仿QQ VS2010聊天程序服务器端、客户端
评论
共有 条评论