CListCtrl控件使用

设置焦点:

   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()

猜你喜欢

转载自blog.csdn.net/u012719076/article/details/85083581
今日推荐