CListView用法_第1页
CListView用法_第2页
CListView用法_第3页
CListView用法_第4页
CListView用法_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

转 CListView 常用用法 上 2010 01 12 17 23 一个程序从宏观上来说 不外乎就是输入 处理 输出 输入与输出对一 个程序来说至关重要 前段时间给可视化平台换脸的时候 平台的输出不仅包 括直观的图像显示 用户还希望直观地得到每帧图像的一些相关的参数信息 统计信息等 这时候我就选择在 CListView 中滚动地显示相关信息 并将窗口 进行切分 将 CListView 的窗口放在整个主窗口的最底端 在需要的时候显示 不需要的时候隐藏 但是 我对 CListView 的用法不是很熟悉 在查 MSDN 和从 网上查相关用法的时候 要不就是零星地介绍 要不就是只介绍 CListCtrl 的 用法 这让我走了很多弯路 为此 我将从网上查到的用法 结合我的实际应 用 简单介绍下 CListView 的使用 希望对像我一样对 CListView 不熟悉或刚 接触 MFC 编程的人有所帮助 对一些编程老手 高手来说 这些自然不在话下 CListView 中内置了 CListCtrl 所以对 CListView 的操作实际上就是对内 置 CListCtrl 的操作 下面就从新建一个 CListView 的子类开始 我从工程中 新建了一个叫做 CInfoView 的类 基类选择 CListView 1 初始化 CListView 设置风格 背景和字体颜色 初始化行列 该项工作在 OnInitialUpdate 中完成 如下所示 void CInfoView OnInitialUpdate CListView OnInitialUpdate TODO Add your specialized code here and or call the base class CListCtrl 得到内置的 listctrl 引用 LONG lStyle lStyle GetWindowLong m list m hWnd GWL STYLE 获取当前窗口风 格 lStyle 清除显示方式位 lStyle LVS REPORT 设置报表风格 SetWindowLong m list m hWnd GWL STYLE lStyle 设置窗口风格 DWORD dwStyle m list GetExtendedStyle 选中某行使整行高亮 只适用于报表风格的 listctrl dwStyle LVS EX FULLROWSELECT dwStyle LVS EX GRIDLINES 网格线 只适用与报表风格的 listctrl m list SetExtendedStyle dwStyle 设置扩展风格 m list SetBkColor RGB 200 200 200 设置背景颜色 m list SetTextBkColor RGB 200 200 200 设置文本背景颜色 m list SetTextColor RGB 10 10 80 设置文本颜色 插入列的标题 为了简单起见 我只插入三列 m list InsertColumn 0 图像帧号 LVCFMT CENTER 80 m list InsertColumn 1 可见性判断 LVCFMT CENTER 110 m list InsertColumn 2 置信度结果 LVCFMT CENTER 110 2 插入一行数据 一般在实际应用中 都是在程序运行中 插入一行数据 这 时候 需要在当前的程序语境中得到 CInfoView 的指针 然后进行插入数据 的操作 在我的应用中 我把 CinfoView 作为拆分窗口的一个子窗口 所以 具体操作如下 CListView listview CListView CMainFrame theApp GetMainWnd m wndSplitter1 GetPane 1 0 得到 ListView 的指针 CListCtrl 得到 listview 内置 listctrl 的引用 CString strId strCo 图像帧号 置信度 CString strVb Y 可见性 if fConfid nIndex TrackPopupMenu TPM LEFTALIGN oPoint x oPoint y this 转转 CListView 常用用法 中 常用用法 中 4 添加消息响应函数 OnCustomDraw 为 ClistCtrl 的每个 Item 设置不同 的颜色 在该应用中 为单数和偶数的 Item 项设置两种不同的颜色 具体 步骤如下 首先在 InfoView h 的 AFX MSG 之间添加消息函数声明 afx msg void OnCustomDraw NMHDR pNMHDR LRESULT pResult 然后在 InfoView cpp 的 BEGIN MESSAGE MAP 之间添加消息映射 ON NOTIFY REFLECT NM CUSTOMDRAW OnCustomDraw 最后在 InfoView cpp 中添加函数实现 void CInfoView OnCustomDraw NMHDR pNMHDR LRESULT pResult LPNMLVCUSTOMDRAW lplvcd LPNMLVCUSTOMDRAW pNMHDR switch lplvcd nmcd dwDrawStage int iRow case CDDS PREPAINT pResult CDRF NOTIFYITEMDRAW break case CDDS ITEMPREPAINT pResult CDRF DODEFAULT iRow lplvcd nmcd dwItemSpec if iRow lplvcd clrText RGB 255 255 0 pResult CDRF NEWFONT break default pResult CDRF DODEFAULT 5 为 CInfoView 添加点击列的标题进行排序的消息响应函数 在添加该消息 响应函数之前 先要定义实现排序的回调函数 在该应用中 第一列是图 像帧号 按自然数排序 其他列都按字串进行排列 所以定义两个比较的 回调函数 在 InfoView h 中声明两个静态的回调函数 static int CALLBACK ListViewCompareFunc LPARAM lParam1 LPARAM lParam2 LPARAM lParamSort 按字串排序 static int CALLBACK ListViewCompareIntFunc LPARAM lParam1 LPARAM lParam2 LPARAM lParamSort 按自然数排序 在 InfoView cpp 中实现两个静态的回调函数 int CALLBACK CInfoView ListViewCompareFunc LPARAM lParam1 LPARAM lParam2 LPARAM lParamSort 得到排序方式 int pisortorder int lParamSort 得到两个列的排序信息 TCHAR sz1 TCHAR lParam1 TCHAR sz2 TCHAR lParam2 比较列的信息并返回比较结果 若为减序 则将比较结果乘上 1 if pisortorder LVS SORTASCENDING return lstrcmp sz1 sz2 else return lstrcmp sz1 sz2 1 int CALLBACK CInfoView ListViewCompareIntFunc LPARAM lParam1 LPARAM lParam2 LPARAM lParamSort 得到排序方式 int pisortorder int lParamSort 得到两个列的排序信息 TCHAR sz1 TCHAR lParam1 TCHAR sz2 TCHAR lParam2 int n1 ttoi sz1 int n2 ttoi sz2 比较列的信息并返回比较结果 若为减序 则将比较结果乘上 1 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 转转 CListView 常用用法 下 常用用法 下 然后通过向导为事件 LVN COLUMNCLICK 添加消息响应函数 OnColumnclick 在该函数中调用上面的回调函数 void CInfoView OnColumnclick NMHDR pNMHDR LRESULT pResult TODO Add your control notification handler code here static int ncurSortCol 1 保存当前的排序列 一开始表示为 1 表示尚未按任何列排序 NM LISTVIEW pNMListView NM LISTVIEW pNMHDR CListCtrl lc LONG ws GetWindowLong lc m hWnd GWL STYLE int nSortOrder 排序的方式 若点击列与当前排序列不同的列 则改变排序序 并将排序方式改为增序 若当前排序列与点击列相同 则更改增 减序的排序方式 if ncurSortCol pNMListView iSubItem if ws nSortOrder LVS SORTDESCENDING else ws LVS SORTDESCENDING nSortOrder LVS SORTASCENDING else if ws ncurSortCol pNMListView iSubItem else nSortOrder LVS SORTASCENDING ncurSortCol pNMListView iSubItem 将当前的排序信息保存在窗口 Style 中 供以后使用 ws nSortOrder SetWindowLong lc m hWnd GWL STYLE ws 将各 ITEM 的 LPARAM 用新排序列的内容替换 LVITEM li li mask LVIF PARAM LVIF TEXT TCHAR szItemText 1024 for int i 0 i GetItemCount i li iItem i li iSubItem ncurSortCol li cchTextMax 1024 li pszText szItemText lc GetItem TCHAR szlparam TCHAR li lParam 删除以前的信息 释放空间 添加 List Item 时应注意将 lParam 初始化 NULL if szlparam NULL delete szlparam 复制当前列的 szItemText 到 Item 的 lParam 中 sz

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论