LVS_ICON: 为每个item显示大图标
LVS_SMALLICON: 为每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料
直观的理解:windows资源管理器,"查看"标签下的"大图标,小图标,列表,详细资料
LVS_ALIGNLEFT |
当显示格式是大图标或小图标时,标题放在图标的左边.缺省情况下标题放在图标的下面. |
LVS_ALIGNTOP |
当显示格式是大图标或小图标时,标题放在图标的上边. |
LVS_AUTOARRANGE |
当显示格式是大图标或小图标时,自动排列控件中的表项. |
LVS_EDITLABELS |
用户可以修改标题. |
LVS_ICON |
指定大图标显示格式. |
LVS_LIST |
指定列表显示格式. |
LVS_NOCOLUMNHEADER |
在报告格式中不显示列的表头. |
LVS_NOLABELWRAP |
当显示格式是大图标时,使标题单行显示.缺省时是多行显示. |
LVS_NOSCROLL |
列表视图无滚动条. |
LVS_NOSORTHEADER |
报告列表视图的表头不能作为排序按钮使用. |
LVS_OWNERDRAWFIXED |
由控件的拥有者负责绘制表项. |
LVS_REPORT |
指定报告显示格式. |
LVS_SHAREIMAGELISTS |
使列表视图共享图像序列. |
LVS_SHOWSELALWAYS |
即使控件失去输入焦点,仍显示出项的选择状态. |
LVS_SINGLESEL |
指定一个单选择列表视图.缺省时可以多项选择. |
LVS_SMALLICON |
指定小图标显示格式. |
LVS_SORTASCENDING |
按升序排列表项. |
LVS_SORTDESCENDING |
按降序排列表项. |
除上表的风格外,一般还要指定WS_CHILD和WS_VISIBLE窗口风格.风格组合WS_CHILD| WS_VISIBLE|LVS_REPORT|LVS_AUTOARRANGE|LVS_EDITLABLES|LVS_SINGLESEL将指定一个自动排列的、可编辑标题的、单选择报告式列表视图控件.要指定大图标、小图标或列表式的列表视图控件,则应该把LVS_REPORT换成LVS_ICON、LVS_SMALLICON或LVS_LIST.
对于用对话框模板创建的列表视图控件,可以在控件的属性对话框中指定上表中列出的控件风格。例如,在属性对话框的Styles页的View栏中选择Icon,相当于指定了LVS_ICON风格.
--------------------------------------------------------------------------------
LONG lStyle;
lStyle = GetWindowLong(m_list.m_hWnd,GWL_STYLE);//获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_list.m_hWnd, GWL_STYLE,lStyle);//设置style
DWORD dwStyle =m_list.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle); //设置扩展风格
--------------------------------------------------------------------------------
选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS
m_list.InsertColumn(0, "ID", LVCFMT_LEFT, 40 );//插入列
m_list.InsertColumn( 1, "NAME",LVCFMT_LEFT, 50 );
//新插入的在上面
int nRow = m_list.InsertItem(0,"11");// 插入行
m_list.SetItemText(nRow, 1,"jacky");//设置其它列数据
//新插入的数据在下面
int nIndex =m_list.GetItemCount();
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT ;
lvItem.iItem = nIndex; //行数
lvItem.iSubItem = 0;
lvItem.pszText = (char*)(LPCTSTR)strCount; //第一列
//在最后一行插入记录值.
m_list.InsertItem(&lvItem);
//插入其它列
m_list.SetItemText(nIndex,1,strLat);
--------------------------------------------------------------------------------
int nIndex = 0;
//选中
m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
//取消选中
m_list.SetItemState(nIndex, 0,LVIS_SELECTED|LVIS_FOCUSED);
--------------------------------------------------------------------------------
CString str;
for (int i = 0; i { if (m_CtrTime.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_CtrTime.GetCheck(i)) { str.Format(_T("第%d行的checkbox为选中状态"), i); AfxMessageBox(str); } } 方法一: CString str; CString strSelected; int delcout; for (int i = 0; i { if (m_ctrList.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED) { str.Format(_T("选中了第%d行"), i); strSelected =m_ctrList.GetItemText(i,0); AfxMessageBox(str); AfxMessageBox(strSelected); delcout++; } } -------------------------------------------------------------------------------- LVCOLUMN lvcol; LV_COLUMN lvColumn; char uin[20]; lvColumn.pszText = uin; lvColumn.cchTextMax = 50; lvColumn.mask = LVCF_TEXT; if (this->GetColumn(col, &lvColumn)) { CString df = lvColumn.pszText; MessageBox(df); } m_list.EnsureVisible(i, FALSE); int nHeadNum =m_list.GetHeaderCtrl()->GetItemCount(); //首先删除所有行 m_ListCtrl.DeleteAllItems(); //得到列数 intnItmcount = m_ListCtrl.GetHeaderCtrl()->GetItemCount(); //删除所有列 for(int i = 0; i { m_ListCtrl.DeleteColumn(0); } -------------------------------------------------------------------------------- 添加listctrl控件的NM_CLICK消息相应函数 添加listctrl控件的NM_CLICK消息相应函数 添加listctrl控件的NM_RCLICK消息相应函数 -------------------------------------------------------------------------------- 添加listctrl控件的LVN_ITEMCHANGED消息相应函数 m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES); --------------------------------------------------------------------------------
-------------------------------------------------------------------------------- 3.5 得到listctrl中所有选中行的序号
CString str;
for(int i=0; i
if(m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("
AfxMessageBox(str);
}
}
方法二:
POSITION pos =m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No itemswere 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
}
}
-------------------------------------------------------------------------------- 3.6 得到item的信息
3.7 得到listctrl的所有列的header字符串内容
char str[256];
int nColNum;
CString strColumnName[4];//假如有4列
nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum,&lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}
-------------------------------------------------------------------------------- 3.8 使listctrl中一项可见,即滚动滚动条
-------------------------------------------------------------------------------- 3.9 得到listctrl列数
-------------------------------------------------------------------------------- 3.10 删除所有行列
3.11 得到单击的listctrl的行列号
void CTest6Dlg::OnClickList1(NMHDR*pNMHDR, LRESULT* pResult)
{
// 方法一:
/*
DWORD dwPos =GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFOlvinfo;
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;
}
-------------------------------------------------------------------------------- 3.12 判断是否点击在listctrl的checkbox上
void CTest6Dlg::OnClickList1(NMHDR*pNMHDR, LRESULT* pResult)
{
DWORD dwPos = GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFOlvinfo;
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;
}
-------------------------------------------------------------------------------- 3.13 右键点击listctrl的item弹出菜单
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;
}3.14 item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序
void CTest6Dlg::OnItemchangedList1(NMHDR*pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW*pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add yourcontrol notification handler code here
CStringsTemp;
if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&(pNMListView->uNewState & LVIS_FOCUSED) == 0)
{
sTemp.Format("%d losted focus",pNMListView->iItem);
}
elseif((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;
-------------------------------------------------------------------------------- 3.15 listctrl的subitem添加图标
m_list.SetItem(..); //具体参数请参考msdn