设置焦点:
BOOL SetItemState(int nItem, UINT nState, UINT nMask)
nItem 要设定状态项的索引。
pItem LVITEM结构的地址,如联机文档“平台SDK”中所述。该结构的 stateMask成员指定了要改变的状态位,并且state成员则包含这些位的新值。另一个成员则被忽略。
nState 状态位的新值。 //nState为0时 取消焦点状态,与nMask一样非0时 选中焦点
nMask 指定要改变状态位的掩码
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
LVS_SINGLESEL 同时只能选中列表中一项
m_list.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
如果是在OnInitDialog中设置,注意它的TAB序号是0。否则,状态设置无效
设置初始化时控件焦点高亮显示第一行:
m_ctrList.SetFocus();//使控件上有焦点
m_ctrList.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED | LVS_SHOWSELALWAYS
, LVIS_SELECTED | LVIS_FOCUSED | LVS_SHOWSELALWAYS);//主要LVS_SHOWSELALWAYS 作用
设置焦点/取消焦点
int nIndex = 0;
//选中 m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
//取消选中 m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);//第2个参数为0
如何得到当前选中项位置
方法一:
添加listctrl控件的NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
//LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);//VS2017上的 可以屏蔽
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*pResult = 0;
}
//pNMListView->iItem 行号 从0开始
//pNMListView->iSubItem 列号
方法二:
int a = m_ctrList.GetNextItem(-1, LVNI_SELECTED);
方法三:
【小结】先初始化InsertColumn 及SetExtendedStyle
再确定行 insertItem,
然后在修改行中列中内容SetItemText()