原文鏈接: http://blog.163.com/lejianz@126/blog/static/11650292013610103232600/
CListCtrl 設置選中狀態
1. 使用CListCtrl的函數SetItemState(int nItem, UINT nState, UINT nMask);
如:
m_list.SetItemState(index,LVNI_FOCUSED | LVIS_SELECTED, LVNI_FOCUSED | LVIS_SELECTED); //設置行index為選中並高亮(如果未設置Focuse,被選中行會變為灰色)
state 字段就是設置item 的狀態。 stateMask是設置影響到的狀態。
這樣要修改 item 狀態,就不需要先獲取每個狀態值,只需要在 stateMask 中指定要修改的某個或者某幾個狀態即可。
例如這里要修改LVIS_SELECTED狀態,只需要將 item 的 state 和 stateMask 都設置為LVIS_SELECTED ,
如果stateMask沒有LVIS_SELECTED,則state中的LVIS_SELECTED也不生效。
2. 另外,要使被選中行高亮顯示,除了將item 的 state 和 stateMask 都設置LVNI_FOCUSED之外,還要將List Control控件的Always show selection屬性設置為TRUE(默認為FALSE,也就是說當前選擇的 item 在控件非激活狀態下是不顯示選中行的)。
3. 經過以上修改,在打開對話框之后,指定item在List Control控件中顯示為選中狀態,但是背景色是灰色,因為打開的對話框焦點不在List Control控件上,
因此需要在對話框類的OnInitDialog()中加一句m_list.SetFocus(),同時將return TRUE改為return FALSE來指示窗口不按照Tab順序來指定焦點。