资源简介
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课设高校教师信息管理系统论文
- 利用MFC开发的Activex指示灯控件
- MFC 自定义 MessageBox
- 员工管理系统源程序MFC+报告
- 基于mfcvc++6.0的图书馆管理系统
- 利用MFC实现的停车场模拟仿真程序
- MFC mschart绘制曲线、饼图、柱状小程序
- mfc 修改密码对话框
- MFC42U.DLL
- 计算机图形学——立方体旋转 VC MFC
- C++二叉树基于Mfc的程序开发
- MFC 日志记录
- 简单的n皇后基于MFC
- MFC 动态创建按钮
-
mfc通过xm
l文件生成word文档 - 任务管理器MFC实现
- MFC的·绘图代码,模仿CAD的界面是我找
- 将彩色图片转换为灰度图片mfc实现
- MFC基于多线程的聊天程序用了winsock套
- SiamFCdemo运行所需stats.mat文件
- 超市管理系统(MFC编写
- MFC五子棋,本地,网络,人机
- 银行家算法 MFC实现
- MFC对话框标题栏的隐藏和高度设置
- easysize MFC对话框大小自动调整
- 基于无限射频卡的饭卡充值系统MFC
- MFC modBus 读写串口
- MFC通过windowsAPI控制计算机关机,注销
- 在MFC中嵌入cef浏览器demo
- mfc安装全局钩子,显示窗口的标题
评论
共有 条评论