listctrl默认view 风格为report
相关类及处理函数
MFC:CListCtrl类
SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn
LVS_ICON: 为每个item显示大图标
LVS_SMALLICON: 为每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料
直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”
CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("选中了第%d行"), i);
AfxMessageBox(str);
}
}
方法二:
POSITION pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_list.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
// you could do your own processing on nItem here
}
}
TCHAR szBuf[1024];
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
m_list.GetItem(&lvi);
关于得到设置item的状态,还可以参考msdn文章 LVCOLUMN lvcol; nColNum = 0; 方法一: 方法二: 首先是添加以下消息 ON_NOTIFY( NM_CUSTOMDRAW, IDC_LIST1, OnDrawColorForMyList ) //为改变颜色添加的消息 再添加类成员函数,就OK了:
Q173242: Use Masks to Set/Get Item States in CListCtrl
9.得到CListCtrl的所有列的header字符串内容
char str[256];
int nColNum;
CString strColumnName[4];//假如有4列
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}
10.是CListCtrl中一项可见,即滚动条
m_list.EnsureVisible(i, FALSE);
11.获取ClistCtrl列的总数
int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
12.删除所有列信息
while ( m_list.DeleteColumn (0))
因为你删除了第一列后,后面的列会依次向上移动。
int nColumns = 4;
for (int i=nColumns-1; i>=0; i--)
m_list.DeleteColumn (i);
13.获取单击的CListCtrl行的行列号
添加listctrl控件的NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// 方法一:
/*
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
int nItem = m_list.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上的check box
添加listctrl控件的NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
UINT nFlag;
int nItem = m_list.HitTest(point, &nFlag);
//判断是否点在checkbox上
if(nFlag == LVHT_ONITEMSTATEICON)
{
AfxMessageBox("点在listctrl的checkbox上");
}
*pResult = 0;
}
15.右键点击CListCtrl的Item弹出菜单
添加listctrl控件的NM_RCLICK消息相应函数
void CTest6Dlg::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.item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序
添加listctrl控件的LVN_ITEMCHANGED消息相应函数
void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString sTemp;
if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&
(pNMListView->uNewState & LVIS_FOCUSED) == 0)
{
sTemp.Format("%d losted focus",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&
(pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
{
sTemp.Format("%d got focus",pNMListView->iItem);
}
if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
(pNMListView->uNewState & LVIS_SELECTED) == 0)
{
sTemp.Format("%d losted selected",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&
(pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
{
sTemp.Format("%d got selected",pNMListView->iItem);
}
*pResult = 0;
}
17.改变CListCtrl行的颜色
//改变 m_List 控件单行的颜色
QQ:564154394
编写者:J ì αn Η й α
论名:华仔
下篇我将会写一篇关于CListCtrl上动态创建EDIT文章,敬请关注。
作者: 丿情调 时间: 2013-9-13 00:10
本帖最后由 sky_yx 于 2015-12-30 14:15 编辑
真心不懂 ╮(╯▽╰)╭ 抢个沙发
作者: 华仔 时间: 2013-9-13 00:14
本帖最后由 sky_yx 于 2015-12-30 14:15 编辑
自我顶,抢占第一个沙发嘻嘻
作者: 华仔 时间: 2013-9-13 00:14
本帖最后由 sky_yx 于 2015-12-30 14:15 编辑
知识的积累,就是财富的积累。------------华仔
作者: 华仔 时间: 2013-9-13 00:20
本帖最后由 sky_yx 于 2015-12-30 14:15 编辑
真心不懂 ╮(╯▽╰)╭ 抢个沙发[/quote]
没事,这个是技术总结,以后你学到这里就可以来我这里看看了,类名是CListCtrl你查下MSDN或百度下
作者: 吣丶 时间: 2013-9-13 00:30
本帖最后由 sky_yx 于 2015-12-30 14:15 编辑
真心不懂英语
作者: 华仔 时间: 2013-9-13 09:32
本帖最后由 sky_yx 于 2015-12-30 14:15 编辑
真心不懂英语[/quote]
英语跟这个还真没有多大关系,呵呵所以不要怕。
作者: 骏马 时间: 2013-9-15 12:46
本帖最后由 sky_yx 于 2015-12-30 14:15 编辑
支持
作者: 1178800363 时间: 2013-9-20 19:22
本帖最后由 sky_yx 于 2015-12-30 14:15 编辑
支持
欢迎光临 SKY外语计算机学习 (http://join.skywj.com/)
Powered by Discuz! X2.5