2013-03-16 36 views
1

我在Windows上使用MSVC 2012下的C++。我使用純Win32 w /對話框,沒有MFC。Win32更改列表視圖項目索引

我有給定項目的LVITEM結構。我想更改給定ListView上的項目的索引,以便我可以重新排列項目的位置。 .iItem屬性本質上是我想改變的,但是,我不知道如何在列表視圖中反映這些變化。

如果可能,我希望ListView自動移動下面移動項目的位置,而不是覆蓋新位置中的現有項目。

+0

你在談論ListView處於報告(詳細)模式還是圖標視圖之一? – 2013-03-16 09:54:07

+0

投訴/詳細視圖:) – kvanberendonck 2013-03-16 10:00:02

+0

我不認爲可以通過更改索引來移動項目。沒有'LVM_SETITEMINFO'消息或類似的東西。 (好吧,有'LVM_SETITEM',但是它不能改變索引,因爲它使用它來識別項目。)我見過的唯一方法是從當前位置移除項目,然後重新插入它進入新的位置。希望別人知道我不喜歡的東西! – 2013-03-16 10:06:18

回答

2

列表視圖項目的索引只會作爲操縱項目集合的副作用而改變。通過在它之前插入一個新項目來增加它,LVM_INSERTITEM。您可以通過刪除它之前的項目LVM_DELETEITEM來減少它。您先移動一個項目,然後將其重新插入另一個位置。或者通過交換LVITEM屬性。

不得不照顧子項目使得這有點尷尬,但這樣寫入本機win32代碼很麻煩。這就是爲什麼有這麼多類庫可以使這更容易。推薦的。

+1

他說什麼。雖然另一種方式,你可以做到這一點是使用'LVM_SORTITEMS'排序列表和一個聰明的比較proc按照你想要的方式命令他們。 – 2013-03-16 12:32:18

+0

LVM_SORTITEMS是永久的嗎?ie:如果我改變排序,它是累積的嗎? – kvanberendonck 2013-03-17 10:10:46