资源简介
MFC.
1. 自定义CMyListView,继承自CListView, 实现点击表头进行该列排序以及固定某些列宽的功能。使用时直接继承此View即可。
2. 自定义CMyListCtrl, 继承自CMFCListCtrl, 同样实现上述功能,用于listctrl控件。使用时,将控件的control变量更改为CMyListCtrl即可。

代码片段和文件信息
#include “MyListView.h“
IMPLEMENT_DYNCREATE(CMyListView CListView)
BEGIN_MESSAGE_MAP(CMyListView CListView)
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK OnColumnClick)//1011 afx_idw_pane_first?
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CView3 construction/destruction
CMyListView::CMyListView()
{
// TODO: add construction code here
m_nCurSortCol = -1;
}
CMyListView::~CMyListView()
{
m_vFrozenCols.clear();
}
BOOL CMyListView::PreCreateWindow(CREATESTRUCT& cs)
{
// 用LVS_SORTDESCENDING时注意, 插入数据时需根据insertitem返回插入n列
cs.style |= LVS_REPORT | LVS_SHOWSELALWAYS ;// | LVS_SORTDESCENDING;
return CListView::PreCreateWindow(cs);
}
//1016 固定列
BOOL CMyListView::OnNotify(WPARAM wParam LPARAM lParam LRESULT* pResult)
{
int len = m_vFrozenCols.size();
if(len > 0)
{
HD_NOTIFY* pHDN = (HD_NOTIFY*)lParam;
switch(((NMHDR*)lParam)->code)
{
case HDN_BEGINTRACKW:
case HDN_BEGINTRACKA:
case HDN_DIVIDERDBLCLICKA:
case HDN_DIVIDERDBLCLICKW:
for(int i=0; i {
if(pHDN->iItem == m_vFrozenCols[i]) //如果拖动的列是设定固定列宽的列之一
{
*pResult = TRUE;
return TRUE;
}
}
}
}
return CListView::OnNotify(wParam lParam pResult);
}
void CMyListView::FreezeColumn(int col)
{
m_vFrozenCols.push_back(col);
}
/////////////////////////////////////////////////////////////////////////////
//1011 排序
int CALLBACK CMyListView::ListViewCompareFunc(LPARAM lParam1 LPARAM lParam2 LPARAM lParamSort)
{
int *pisortorder = (int*)lParamSort;//得到排序方式
TCHAR *sz1 = (TCHAR*)lParam1;
TCHAR *sz2 = (TCHAR*)lParam2;//得到两个列的排序信息
if(*pisortorder == LVS_SORTASCENDING)
return lstrcmp(sz1 sz2);
else
return lstrcmp(sz1 sz2) * (-1);
}
int CALLBACK CMyListView::ListViewCompareIntFunc(LPARAM lParam1 LPARAM lParam2 LPARAM lParamSort)
{
int *pisortorder = (int*)lParamSort;//得到排序方式
TCHAR *sz1 = (TCHAR*)lParam1;
TCHAR *sz2 = (TCHAR*)lParam2;//得到两个列的排序信息
int n1 = _ttoi(sz1);//? 不用单独提出int
int n2 = _ttoi(sz2);
if(*pisortorder == LVS_SORTASCENDING)
{
if(n1 - n2 > 0) return 1;
else if(n1 - n2 == 0) return 0;
else return -1;
}
else
{
if(n1 - n2 > 0) return -1;
else if(n1 - n2 == 0) return 0;
else return 1;
}
}
void CMyListView::CallSort(int nSortCol BOOL dftOrder)
{
CListCtrl* rList = &GetListCtrl();
LONG ws = GetWindowLong(rList->m_hWnd GWL_style);
int nSortOrder;
//若采用默认排序,用当前顺序//降序
//若点击列与当前排序列不同,则改变排序, 降序
//若相同, 更改增减序的排序方式.
//若点击列与当前排序列不同,则改变排序, 降序
//若点击列与当前列相同,若True,排序不变, false,改变
if(m_nCurSortCol != nSortCol)
{
// ws ^= LVS_SORTASCENDING;
ws &= ~LVS_SORTASCENDING;
nSortOrder = LVS_SORTDESCENDING;
m_nCurSortCol = nSortCol;
}
else
{
if(ws & LVS_SORTASCENDING)
{
if(!dftOrder)
{
//ws ^= LVS_SORTASCENDING;
ws &= ~LVS_SORTASCENDING;
nSortOrder = LVS_SORTDESCENDING;
}
else
{
nSor
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5702 2013-10-21 14:37 MyListView.cpp
文件 1566 2013-10-21 14:38 MyListView.h
----------- --------- ---------- ----- ----
7268 2
- 上一篇:银行叫号系统模拟C语言
- 下一篇:EEPROM的C语言控制程序
相关资源
- 基于MFC的TCP调试助手源码95706
- 基于mfc的多线程文件传输
- MFC数字钟(基于VC6.0)
- VC++MFC小游戏实例教程(实例)+MFC类库
- ChartCtrl控件库(可在VS2019中使用)
- 商品库存管理系统 C++ MFC
- mfc 调用redis
- MFC视频播放器源码(支持avi/wma/mp3等格
- mfc绘图大全(画直线、矩形、椭圆)
- MFC控件重绘
- hook,捕获所有案件,查找所有窗口,
- (学习)VS2010之MFC入门到精通教程
- MFC文档_视图_框架_模板结构体系深入
- 简单员工管理系统(适合初学MFC)
- MFC五子棋游戏
- MFC UDP编程
- MFC的异步网络通讯应用程序
- C++MFC模块讲解,黑发程序员课程整理
- 一个简单而强大的基于MFC的web server源
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- MFCaccess.rar
- VC++MFC课程设计的学生成绩管理系统
- MFC 日历控件 万年历 Calendar自绘
- CrystalDiskInfo-HDD/SSD硬盘信息,SMART信息
- MFC自定义界面HUI,高效简单,含详细
- 仿射密码-Affine cipher
- c++MFC车牌自动识别定位,只能定位和
- mfc+sql 酒店客房管理系统
- 基于图割的图像分割OpenCV+MFC实现
- MFC绘制Bezier曲线B样条曲线曲线拟合
评论
共有 条评论