CList的使用

1. CListCtrl 风格     
LVS_ICON: 为每个item显示大图标
LVS_SMALLICON: 为每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料

//2. 设置listctrl 风格及扩展风格
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); //设置扩展风格

//3. 插入数据
nItem表示行,nSubItem表示列
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”);//设置数据


//5. 选中和取消选中一行
int nIndex = 0;
//选中
m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
//取消选中
m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);

//6. 得到listctrl中所有行的checkbox的状态
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
    
    
    if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))
    {
    
    
        str.Format(_T("第%d行的checkbox为选中状态"), i);
        AfxMessageBox(str);
    }
}

//7. 得到listctrl中所有选中行的序号
方法一:
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
}
}

8.1 得到选中的行的每一项的信息
得到具体的某一项:
CString str;
int nId;
//首先得到点击的位置
POSITION pos=m_listcontrol.GetFirstSelectedItemPosition();
if(pos==NULL)
{
    
    
MessageBox("请至少选择一项","娃子理财",MB_ICONEXCLAMATION);
return;
}
//得到行号,通过POSITION转化
nId=(int)m_listcontrol.GetNextSelectedItem(pos);
//得到列中的内容(0表示第一列,同理1,2,3...表示第二,三,四...列)
str=m_listcontrol.GetItemText(nId,0);
str=m_listcontrol.GetItemText(nId,1);

//利用itemdata
double bl = atof(dlg.m_BFB)/100;
CString *BL = new CString(Convert::NumToStr(bl,2));
m_list_PFIn.SetItemData(idx,(DWORD_PTR)(BL));
CString BL_list = *(CString*)m_list_PFIn.GetItemData(idx);//取

//让list可以编辑
m_pDKGL.SetReadOnlyColumns(2);
m_pDKGL.SetColumnValidEditCtrlCharacters(str,3);

CComboListCtrl

猜你喜欢

转载自blog.csdn.net/happy_teemo/article/details/113480947