2015-05-12 101 views
2

我正在嘗試編寫一個程序,它可以在列表視圖中選擇並聚焦特定的項目。如何在列表視圖項目上設置焦點?

爲什麼調用ListView_SetSelectionMark(或發送LVM_SETSELECTIONMARK)無法將焦點置於列表視圖項目上?在調用ListView_SetSelectionMark之後,焦點仍然保留在原來的位置而不是更改爲新位置;當我按下一個箭頭鍵時,它會從先前關注的項目而不是我指定的項目移動。

這裏是我的代碼片段,選擇和重點項目:

ListView_SetItemState(this->m_hwndChild, index, LVNI_SELECTED, LVNI_SELECTED); 
ListView_SetSelectionMark(this->m_hwndChild, index); 
ListView_EnsureVisible(this->m_hwndChild, index, false); 
SetFocus(this->m_hwndChild); 

Here is a full gist。每次按Ctrl-R時,它都會選擇列表視圖中的一個隨機項目。

回答

2

SelectionMark與焦點無關。它僅指示哪個項目開始多重選擇。

您需要使用LVIS_FOCUSED項目狀態,而不是:

ListView_SetItemState(this->m_hwndChild, index, LVNI_SELECTED | LVNI_FOCUSED, LVNI_SELECTED | LVNI_FOCUSED); 
ListView_EnsureVisible(this->m_hwndChild, index, false); 
SetFocus(this->m_hwndChild); 
+0

謝謝!我想我沒想過要設置LVIS_FOCUSED列表視圖項目樣式,因爲我知道設置相似的TVIS_SELECTED樹視圖項目樣式不夠。 – yonran

相關問題