ListCtrl控件的部分操作,有些内容是从http://www.cppblog.com/finehai/archive/2009/09/17/96574.html这位大神博客中转载的
//设置CListCtrl的属性
LONG lStyle;
lStyle = GetWindowLong(m_listinfo.m_hWnd, GWL_STYLE);//获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_listinfo.m_hWnd, GWL_STYLE, lStyle);//设置style
DWORD dwStyle = m_listinfo.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_listinfo.SetExtendedStyle(dwStyle); //设置扩展风格
//插入列
m_listinfo.InsertColumn(0,_T("姓名"),LVCFMT_CENTER,100);//0列,列标题“姓名”,格式,宽度,与列关联的子项 默认为-1,无关联
m_listinfo.InsertColumn(1,_T("科目"),LVCFMT_CENTER,100);
m_listinfo.InsertColumn(2,_T("成绩"),LVCFMT_CENTER,100);
//插入行
//第一行
m_listinfo.InsertItem(0,_T("张三"));
m_listinfo.SetItemText(0,1,_T("语文"));
m_listinfo.SetItemText(0,2,_T("98"));
//第二行
m_listinfo.InsertItem(1,_T("李四"));
m_listinfo.SetItemText(1,1,_T("数学"));
m_listinfo.SetItemText(1,2,_T("100"));
//设置某行为选中状态
//选中
int nIndex = 0;
m_listinfo.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<m_listinfo.GetItemCount(); i++)
{
if( m_listinfo.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_listinfo.GetCheck(i))
{
str.Format(_T("第%d行的checkbox为选中状态"), i);
AfxMessageBox(str);
}
}
// 得到listctrl中所有选中行的序号
// 方法一:
for(int i=0; i<m_listinfo.GetItemCount(); i++)
{
if( m_listinfo.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("选中了第%d行"), i);
AfxMessageBox(str);
}
}
// 方法二:
POSITION pos = m_listinfo.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_listinfo.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
// you could do your own processing on nItem here
}
}
//
// 得到item的信息
int nItemIndex=1;
TCHAR szBuf[1024];
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
lvi.cchTextMax = 1024;
m_listinfo.GetItem(&lvi);
//删除所有列
//方法一:
//while(m_list.DeleteColumn(0))
//因为你删除了第一列后,后面的列会依次向上移动。
//方法二:
//从下向上删除
/*int nColumns = 2;
for (int i=nColumns-1; i>=0; i--)
m_list.DeleteColumn (i);*/