VC MFC列表视图(CListCtrl)控件
VC MFC列表视图(CListCtrl)控件
列表视图控件
图标风格
CListCtrl类里要了解的函数
SetImageList为列表控件关联一个图像列表
InsertItem插入一项
GetSelectionMark获取选中项的索引
GetItemText根据项索引获取项文本内容
首先往工程里引入七个图标,接着在对话框里添加一个列表视图控件,然后为控件关联一个变量CListCtrl,再往对话框类添加一个变量CImageList m_ImageList;
在对话框类的初始化函数中添加以下代码:
m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,0);
for(int i=0;i<7;i++)
m_ImageList.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1+i)));
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_NORMAL);
for(i=0;i<7;i++)
{
CString str;
str.Format("小明%d",i);
m_ListCtrl.InsertItem(i,str,i);
}
运行效果:
获取选中项内容(单击一个按钮,弹出消息提示)按钮消息处理函数代码:
int Sel=m_ListCtrl.GetSelectionMark();
CString str;
str=m_ListCtrl.GetItemText(Sel,0);
MessageBox(str);
报告风格
SetExtendedStyle设置列表控件扩展风格,该函数只有一个参数,关于该参数的解释,没找到中文的,只能先用英文替着了(msdn)
网址:http://msdn.microsoft.com/zh-cn/vbasic/bb774732(v=VS.90)
(PS:LVS_EX_CHECKBOXES设置项具有有核记风格,GetCheck可以用于判断一个项有无核记
LVS_EX_TRACKSELECT设置项具有热点风格,GetHotItem可获取当前鼠标热点项)
)
InsertColumn插入一列
InsertItem插入一行
SetItemText根据行列,设置一项数据
把列表控件改成“报告”风格
然后在初始化函数里添加以下语句:
//设置行列线和可以整行选中风格
m_ListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
//插入三列
m_ListCtrl.InsertColumn(0,"商品名称",LVCFMT_LEFT,100);
m_ListCtrl.InsertColumn(1,"买入价格:元",LVCFMT_LEFT,100);
m_ListCtrl.InsertColumn(2,"卖出价格:元",LVCFMT_LEFT,100);
//插入一行
m_ListCtrl.InsertItem(0,"洗衣粉",0);
m_ListCtrl.SetItemText(0,1,"10");//设置0列1行数据
m_ListCtrl.SetItemText(0,2,"15");
m_ListCtrl.InsertItem(1,"牙膏",1);
m_ListCtrl.SetItemText(1,1,"8");
m_ListCtrl.SetItemText(1,2,"12");
运行效果:
获取选中数据,可先用GetSelectionMark获取选中行,再用GetItemText获取具体内容,如果获取选中的商品名称:
int Sel=m_ListCtrl.GetSelectionMark();
char str[52];
m_ListCtrl.GetItemText(Sel,0,str,52);
MessageBox(str);
设置列表视图控件项行高及字体大小
过程跟设置菜单栏项高及字体大小一样,处理WM_MEASUREITEM和WM_DRAWITEM消息,不过是处理对话框里这两个消息,前面说过了,子窗口是接不到这两个消息的,所以不要给从CListCtrl派生下来的类添加这两个消息处理函数,处理父窗口的消息就行了,如果要子窗口接收到这两个消息,需要消息反射,这里就直接处理父窗口的消息了,关于用消息反射的方法将在后面介绍。因为是采用WM_DRAWITEM消息的方式自绘,所以列表框得改成"报告"风格,(剩下三种风格不支持).
(PS:后面才发现,直接重载父类的方法也可以,DrawItem方法,是个虚函数,而不必响应父窗口WM_DRAWITEM消息,再调用DrawItem函数,我只在自绘按钮控件中用过这个方法,因为其它的不能在界面重载这个方法,以为没有,也没怎么注意)
首先从CListCtrl类派生出子类CNewListCtrl,然后给CNewListCtrl类添加一个函数:
void NewListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
该函数代码如下:
void CNewListCtrl::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
// TODO: Add your code to draw the specified item
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
CRect rect=lpDrawItemStruct->rcItem;
dc.FillSolidRect(rect,RGB(38,255,147));
CHeaderCtrl* pHeaderCtrl =GetHeaderCtrl();
int colCount = pHeaderCtrl->GetItemCount();//获取列数量
int line=lpDrawItemStruct->itemID;
dc.SetTextColor(RGB(255,62,62));
CFont Font;
Font.CreatePointFont(125,"宋体");//创建字体
dc.SelectObject(&Font);
for(int col=0;col<colCount;col++)
{
CString str=GetItemText(line,col);//获取项文本
int colWidth=GetColumnWidth(col);//获取列宽度
dc.DrawText(str,rect,DT_VCENTER|DT_LEFT|DT_SINGLELINE);
rect.left+=colWidth;
}
dc.Detach();
}
给父窗口(对话框)添加WM_MEASUREITEM和WM_DRAWITEM消息处理函数,两个函数代码分别如下:
void CSixthDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
// TODO: Add your message handler code here and/or call default
if(lpMeasureItemStruct->CtlType==ODT_LISTVIEW)
lpMeasureItemStruct->itemHeight=25;//设置行高
else
CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
void CSeventhDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(lpDrawItemStruct->CtlType==ODT_LISTVIEW)
m_ListCtrl.DrawItem(lpDrawItemStruct);//m_ListCtrl为列表控件关联的变量
else
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
接下来给对话框添加一个列表控件,设置风格为“报告”,勾上“所有者绘制固定"并关联变量m_ListCtrl,类型CNewListCtrl(记得包含头文件)。
对话框初始化函数代码如下:
m_ListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES);
//插入三列
m_ListCtrl.InsertColumn(0,"商品名称",LVCFMT_LEFT,100);
m_ListCtrl.InsertColumn(1,"买入价格:元",LVCFMT_LEFT,100);
m_ListCtrl.InsertColumn(2,"卖出价格:元",LVCFMT_LEFT,100);
//插入一行
m_ListCtrl.InsertItem(0,"洗衣粉",0);
m_ListCtrl.SetItemText(0,1,"10");//设置0列1行数据
m_ListCtrl.SetItemText(0,2,"15");
m_ListCtrl.InsertItem(1,"牙膏",1);
m_ListCtrl.SetItemText(1,1,"8");
m_ListCtrl.SetItemText(1,2,"12");
运行效果:
上面依然只是简单处理了一下项状态,甚至连选中的状态都没有处理,如果需要处理的话,可自行参考PDRAWITEMSTRUCT结构里的itemState变量解释
如:if(lpDrawItemStruct->itemState&ODS_SELECTED) //如果项被选
VC MFC列表视图(CListCtrl)控件相关推荐
- clistctrl获取列高 mfc_VC MFC列表视图(CListCtrl)控件
列表视图控件 图标风格 CListCtrl类里要了解的函数 SetImageList为列表控件关联一个图像列表 InsertItem插入一项 GetSelectionMark获取选中项的索引 GetI ...
- VC/MFC中的CComboBox控件使用详解
CComboBox控件详解 CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down l ...
- VC++ MFC获取对话框上控件的位置
CRect rect;GetDlgItem(控件ID)->GetWindowRect(&rect);//获取控件的屏幕坐标 ScreenToClient(&rect);//转换为 ...
- MFC学习--下拉框、列表、树控件、选项卡
下拉框.列表.树控件.选项卡 下拉框 属性 代码操作 列表控件 属性 代码操作 树控件 属性 代码操作 选项卡 属性 代码操作 文化建设 下拉框 属性 Data: 下拉可选项,用分号分隔( ; ) T ...
- MFC CListCtrl控件基本使用图解
新建一个对话框工程:添加CListCtrl控件:为控件添加成员变量,如下图: 成员变量名称,m_ctrllist: 如下图,找到对话框初始化成员函数,转到定义,进入此函数代码: 找到 // TODO: ...
- CListCtrl控件详解
1.视图类别 列表视图控件可用四种不同方式显示其内容,称之为"视图",有以下四个类别: 图标视图:每一项以全尺寸图标(32×32像素)出现,下面有一个标签.用户可在列表视图窗口拖动 ...
- MFC中动态创建控件以及事件响应实现方法
本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...
- MFC工程使用flash控件
利用flash可以作出很漂亮的动画,想不想让自己的程序也有这样漂亮的界面呢?^_^,其实,要做到这点也不难.在这里将介绍怎样把falsh制作的界面嵌入到自己的程序中,并让flash动画和自己的程序进行 ...
- vc++6.0使用串口控件例程
vc++6.0使用串口控件例程 1.建立项目: 打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest; 2.在项目中插入MSComm控件 选择Project菜单下Add To Pr ...
最新文章
- ubuntu mysql deb_Ubuntu 通过Deb 安装 MySQL 5.5 [转载]
- 在CentOS7上安装和使用ZooKeeper最新版本(V3.4.12)
- TensorRTSamplePython[end_to_end_tensorflow_mnist]
- 如果从零开始开发一款APP,需要做哪些准备
- java中运用数组排序_JAVA中运用数组的四种排序方法
- FlexPaper — 可以用来仿豆丁网、百度文库的PDF在线阅读功能
- MySQL卸载不干净问题
- RFC 2544 标准—以太网测试仪
- 【TencentOS tiny学习】源码分析(6)——互斥锁
- navigator 常用API的使用及其使用场景
- ‘data‘ hides member of supertype ‘BaseExpAdapter‘ and needs ‘override‘ modifier
- 麻省理工大学线性代数1806(2)消元法及矩阵消元法 矩阵行变换、列变换 置换矩阵 逆矩阵 如沐春风、如饮甘露、醍醐灌顶的线性代数
- 高频交易及化资策与区
- 如何右键菜单添加命令提示符_在右键菜单顶部添加过滤器命令
- android_Socket网络编程实现手机图片上传到电脑
- unity太空飞机射击游戏
- 计算机引起usb设备无法识别的原因有哪些,计算机无法识别USB设备是什么原因
- 中古调式(调式音阶)
- P2P网贷平台转型案例
- dvwa brute force(暴力破解)
热门文章
- n皇后问题c语言_用栈解决N皇后问题(C语言)
- android文件搜索广播,Android 实现无网络传输文件
- observable java_java源码阅读Observable(观察者模式)
- sqlserver 参数化查询 允许为null_关于SQL Server的insert执行的秘密(上)一个最简单的insert分析...
- 架构设计文档规范文档
- 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法
- C语言学习笔记---结构体的定义和初始化
- Centos7.5 安装 mysql 5.7 ( 卸载自带 MariaDB)(实测)
- tensorflow数据读取机制
- MongoDB两阶段提交实现事务