CListCtrl使用总结

 
//*********************************************************
//
//设置ListCtrl的View样式
//
m_listCtrl.SetView(LV_VIEW_DETAILS);
//还有其它样式:         View属性值
//LV_VIEW_DETAILS   --- Report
//LV_VIEW_ICON      --- Icon
//LV_VIEW_SMALLICON --- Small Icon
//LV_VIEW_LIST      --- List
//使用最多的样式是LV_VIEW_DETAILS即View风格为Report
//一般是在ListCtrl控件的属性页面里设置View值为Report

//*********************************************************
//
//设置ListCtrl的风格
//
DWORD dwStyle = ::GetWindowLong(m_listCtrl.GetSafeHwnd(), GWL_STYLE); 
dwStyle |= LVS_SINGLESEL;       //只可单行选中
dwStyle |= LVS_SHOWSELALWAYS;   //Always show selection
::SetWindowLong(m_listCtrl.GetSafeHwnd(), GWL_STYLE, dwStyle);

//*********************************************************
//
//设置ListCtrl的扩展风格
//
DWORD dwStyle = m_listCtrl.GetExtendedStyle();
dwStyle |= LVS_EX_GRIDLINES;        //网格线
dwStyle |= LVS_EX_FULLROWSELECT;    //整行高亮
dwStyle |= LVS_EX_CHECKBOXES;       //Item前生成check box
m_listCtrl.SetExtendedStyle(dwStyle);

//*********************************************************
//
//通过Image间接设置行高
//
m_imgList.Create(1, 20, ILC_COLOR32, 1, 1);    //图片宽1高20
m_listCtrl.SetImageList(&m_imgList, LVSIL_SMALL);

//*********************************************************
//
//插入Column
//
m_listCtrl.InsertColumn(0, TEXT("Name"), LVCFMT_LEFT, 100);
m_listCtrl.InsertColumn(1, TEXT("Age"), LVCFMT_LEFT, 40);
m_listCtrl.InsertColumn(2, TEXT("Gender"), LVCFMT_LEFT, 60);

//*********************************************************
//
//插入Item
//
int nItem = 0;
nItem = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), TEXT("WangYao"), 0);
m_listCtrl.SetItemText(nItem, 1, TEXT("26"));   //子项从1开始,0代表主项
m_listCtrl.SetItemText(nItem, 2, TEXT("Male"));
nItem = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), TEXT("WangYan"), 0);
m_listCtrl.SetItemText(nItem, 1, TEXT("24"));
m_listCtrl.SetItemText(nItem, 2, TEXT("Female"));

//*********************************************************
//
//删除Column
//
m_listCtrl.DeleteColumn(nCol);
//删除所有列(1)
int nColumnCount = m_listCtrl.GetHeaderCtrl()->GetItemCount();
for (int i=0; i < nColumnCount; i++)
{
    m_listCtrl.DeleteColumn(0);
}
//删除所有列(2)
while (m_listCtrl.DeleteColumn(0));

//*********************************************************
//
//删除Item
//
m_listCtrl.DeleteItem(nItem);
m_listCtrl.DeleteAllItems();

//*********************************************************
//
//获取指定行指定列的Item Text: GetItemText
//
CString cstrInfo = m_listCtrl.GetItemText(1, 0);    //与SetItemText对应

//*********************************************************
//
//SetItemData与GetItemData:设置与获取附加数据
//
BOOL SetItemData(int nItem, DWORD_PTR dwData)
DWORD_PTR GetItemData(int nItem) const

//*********************************************************
//
//获取当前选中项s
//
//方法1:
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)    //当前没有选中项
{
}
else                //有选中项
{
    while (pos)
    {
        int nItem = m_listCtrl.GetNextSelectedItem(pos);    //获取选中项的序号
    }
}
//方法2:
for(int i=0; i<m_listCtrl.GetItemCount(); i++)
{
    if(m_listCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED)
    {
        //表明选中第i项
    }
}

//*********************************************************
//
//利用代码选中或取消选中某Item
//
//选中:(当然LVIS_FOCUSED可以省略)
m_listCtrl.SetItemState(nItem, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
m_listCtrl.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
//取消选中(当然LVIS_FOCUSED可以省略)
m_listCtrl.SetItemState(nItem, 0, LVIS_SELECTED | LVIS_FOCUSED);
m_listCtrl.SetItemState(nItem, 0, LVIS_SELECTED);

//*********************************************************
//
//获取或设置Check Box状态
//
BOOL GetCheck(int nItem) const;
BOOL SetCheck(int nItem, BOOL fCheck = TRUE);


//
// HitTest
//
CPoint pnt;
::GetCursorPos(&pnt);
m_listCtrl.ScreenToClient(&pnt);
 
LVHITTESTINFO info;
info.pt = pnt;
info.flags = LVHT_ONITEM;
m_listCtrl.SubItemHitTest(&info);
 
if (info.iItem == -1)
    return;

你可能感兴趣的:(CListCtrl使用总结)