VC的CListCtrl控件
1. CListCtrl 样式及设置
2. 扩展样式设置
3. 数据插入
4. 一直选中Item
5. 选中和取消选中Item
6. 得到CListCtrl中所有行的checkbox的状态
7. 得到CListCtrl中所有选中行的序号
8. 得到item的信息
9. 得到CListCtrl的所有列的header字符串内容
10. 使CListCtrl中一项可见,即滚动滚动条
11. 得到CListCtrl列数
12. 删除所有列
13. 得到单击的CListCtrl的行列号
14. 判断是否点击在CListCtrl的checkbox上
15. 右键点击CListCtrl的item弹出菜单
16. CListCtrl进行大数据量更新时,避免闪烁
!时间仓促,此播客内容大多为网上整理,特向原作者表示感谢!
1. CListCtrl 样式及设置
LVS_ICON: 每个item显示大图标
LVS_SMALLICON: 每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料
如windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”
LONG lStyle;
lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //设置style
2. 扩展样式设置
DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //获取当前扩展样式
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(report风格时)
dwStyle |= LVS_EX_GRIDLINES; //网格线(report风格时)
dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控件
m_ListCtrl.SetExtendedStyle(dwStyle); //设置扩展风格
3. 数据插入
m_ListCtrl.InsertColumn(0,"名称",LVCFMT_LEFT,50); //插入列
m_ListCtrl.InsertColumn(1,"备注",LVCFMT_LEFT,50);
//直接插入:
int nRow=m_ListCtrl.InsertItem(0, "VC++"); //插入行
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0"); //设置数据
//LVITEM 结构插入:
LVITEM item={0};
item.iItem=0; //行号
item.mask=LVIF_TEXT; /*LVIF_IMAGE支持图标*/;
item.cchTextMax=15;//插入字符串长度
item.pszText="Visual C++ 6.0";
int nRow=m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0");
4. 一直选中Item
选中style中的 Show selection always,
或者添加扩展样式 LVS_SHOWSELALWAYS
5. 选中和取消选中Item
int nIndex = 0;
//选中
m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED|
LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
//取消选中
m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
6. 得到CListCtrl中所有行的checkbox的状态
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)==
LVIS_SELECTED || m_ListCtrl.GetCheck(i))
{
str.Format(_T("第%d行的checkbox为选中状态"), i);
AfxMessageBox(str);
}
}
7. 得到CListCtrl中所有选中行的序号
//方法一:
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("选中了第%d行"), i);
AfxMessageBox(str);
}
}
//方法二:
POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
if(pos==NULL)
TRACE0("No items were selected!/n");
else
{
while(pos)
{
int nItem=m_ListCtrl.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!/n", nItem);
//添加其他操作
}
}
8. 得到item的信息
TCHAR szBuf[1024];
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
lvi.cchTextMax = 1024;
m_ListCtrl.GetItem(&lvi);
关于得到设置item的状态,还可以参考msdn文章
Q173242: Use Masks to Set/Get Item States in CListCtrl
http://support.microsoft.com/kb/173242/en-us
9. 得到CListCtrl的所有列的header字符串内容
LVCOLUMN lvcol;
char str[256];
int nColNum;
CString strColumnName[3];//假如有3列
nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}
10. 使CListCtrl中一项可见,即滚动滚动条
m_ListCtrl.EnsureVisible(i, FALSE);
11. 得到CListCtrl列数
int nHeadNum=m_ListCtrl.GetHeaderCtrl()->GetItemCount();
12. 删除所有列
方法一:
while(m_ListCtrl.DeleteColumn(0))
//因为你删除了第一列后,后面的列会依次向上移动。
方法二:
int nColumns = 3; //列数
for(int i=nColumns-1; i>=0; i--)
m_ListCtrl.DeleteColumn(i);
13. 得到单击的CListCtrl的行列号
添加listctrl控件的NM_CLICK消息相应函数
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
//方法一:
DWORD dwPos=GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos));
m_ListCtrl.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt=point;
lvinfo.flags=LVHT_ABOVE;
int nItem=m_ListCtrl.SubItemHitTest(&lvinfo);
if(nItem!=-1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列",
lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
// 方法二:
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem!=-1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*pResult = 0;
}
14. 判断是否点击在CListCtrl的checkbox上
添加listctrl控件的NM_CLICK消息相应函数
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos=GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos));
m_ListCtrl.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt=point;
lvinfo.flags=LVHT_ABOVE;
UINT nFlag;
int nItem=m_ListCtrl.HitTest(point, &nFlag);
//判断是否点在checkbox上
if(nFlag==LVHT_ONITEMSTATEICON)
{
AfxMessageBox("点在listctrl的checkbox上");
}
*pResult = 0;
}
15. 右键点击CListCtrl的item弹出菜单
添加CListCtrl控件的NM_RCLICK消息相应函数
void CMyDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem!=-1)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
CMenu menu;
VERIFY( menu.LoadMenu( IDR_MENU1 ) );
CMenu* popup = menu.GetSubMenu(0);
ASSERT( popup != NULL );
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this );
}
*pResult = 0;
}
16. CListCtrl进行大数据量更新时,避免闪烁
m_ListCtrl.SetRedraw(FALSE);
//更新内容
m_ListCtrl.SetRedraw(TRUE);
m_ListCtrl.Invalidate();
m_ListCtrl.UpdateWindow();
//或者参考
VC的CListCtrl控件的更多相关文章
- 【VS开发】关于在CFormView中实现CListCtrl控件的注意事项
[VS开发]关于在CFormView中实现CListCtrl控件的注意事项 标签(空格分隔): [VS开发] 今天调试中发现了一项非常令人恼怒的事情,本来早都知道在CFormView中没有了像在对话框 ...
- MFC实现 自适应操作系统的CListCtrl控件
新建对话框应用程序,删除自动生成的控件后,拖拽一个CListCtrl控件,绑定变量名为:m_listctrl.在对话框初始化成员函数OnInitDialog()中键入以下代码即可实现自适应系统的CLi ...
- VC++ 使用WebBrowser控件中html文件以资源形式加载
. . . . //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID wchar_t self_path[MAX_PATH] = { }; GetModuleFileNa ...
- CListCtrl控件中显示进度条
CListCtrl控件的subitem中显示进度条 http://www.codeproject.com/Articles/6813/List-Control-Extended-for-Progres ...
- VC++编写ActiveX控件
ActiveX这门技术是通过生成“*.ocx”文件来实现的.先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件.如果你用过Visual ...
- CListCtrl控件使用方法总结
今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtr ...
- 获取windows进程信息及CListCtrl控件(List Control)练习
环境:VS2010/MFC/对话框 效果图: 目录: 1. 关于windows进程信息获取 2. CListCtrl的使用 ------------------------------------ ...
- 【VS开发】CListCtrl控件使用方法总结
CListCtrl控件使用方法总结 今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类 ...
- VC/MFC ListCtrl 控件功能使用汇总(转)
以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...
随机推荐
- Lintcode---二叉树的最大深度
给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的距离. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的 ...
- mysql联合查询union
mysql联合查询,对多表进行组合查询 使用 UNION ALL 命令实例 显示所有 使用UNION 过滤重复的 使方法 select * from (SELECT id,name as usenam ...
- MONGODB Date 处理方法
mongodb 日期处理:1,用new Date()存入数据库,要转一下.2,输出的显示的时候,要把data 后的Z 去啦.3, 查询时数据时不用处理.
- 【Android界面实现】View Animation 使用介绍
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 我们能够使用view animation 动画系统来给View控件加入tween动画(下称& ...
- 【JavaScript】一个同步于本地时间的动态时间
这样例很easy.了解JavaScript之后就是几行的代码便可以完毕的事情. 可是对于一些未接触过JavaScript的人来说,差点儿非常大project的样子.然后在网上苦苦寻觅代码,之后在茫茫的 ...
- [svc]salt源码安装软件和yum安装软件
上面简单列出了源码安装的sls文件书写思路. 涉及到一些固定的思路:如, 1,拷贝 解压安装时候需要依赖tar.gz存在 如果已安装则无需再次安装. 2,启动脚本 加入chk时候需要文件存在,如果已添 ...
- 启动tomcat的时候,报Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this program 的解决方案
解决方法,如下所示: 先看Tomcat的startup.bat,它调用了catalina.bat,而catalina.bat则调用了setclasspath.bat.只要在setclasspath.b ...
- windows7常用操作命令
1.打开命令行 按住Windows键加R键,打开运行窗口 2.打开笔记本 运行窗口中输入:notepad,点击确定或回车,打开记事本工具 主要作用:浏览网页时,看到一些有用的话,那么你是怎么把它记录下 ...
- php调用c语言编写的so动态库
from http://blog.csdn.net/wzhwho/article/details/6949297 PHP除了使用扩展库的方式调用c函数,还可以通过socket通信的方式.这里介绍前者. ...
- Des加密方法
//默认密钥向量 private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; private st ...