關於列表控制元件的定位屬性

疑惑的存在,代表著你還未能徹底明白

有時候,我會收到一個關於列表控制元件ListView的問題,這個問題體現了大家對可定位和不可定位列表缺乏深刻的理解。

這個問題通常是這樣的:”我透過LVM_INSERTITEM將一行插入到列表控制元件中,但是這個專案直接顯示在了列表控制元件的最底下,而不是我希望的位置。”

為了弄明白這是怎麼回事兒,你需要首先明白一個概念,即:列表控制元件可以分為兩種型別,一種是所謂的可定位的,另一種是不可定位的。

可定位的列表控制元件有如下幾種:

大圖示檢視(Large Icon View)

小圖示檢視(Small Icon View)

標題檢視(Title View)

在這些控制元件中,每個專案都會包含它自己的座標資訊,你也可以使用LVM_SETITEMPOSITION這個訊息來設定它的顯示位置。當一個新的行被插入到控制元件中時,它會獲得基於插入位置的一個行索引,但它在螢幕上的物理位置是第一個未被其他專案佔用的可用空間。

現有的條目不會為新插入的條目挪動空間。

而下列檢視則是不可定位的:

列表檢視(List View)

報表檢視(Report View)

在這些控制元件中,在這些檢視中,條目不能選擇它們的顯示位置。它們的顯示位置由它們的索引來決定。根據這個原理,在不可定位檢視中,插入或刪除一個條目確實會導致所有後續條目發生偏移。

我想,現在你可以回答這個問題了。為什麼條目會追加到列表控制元件的末尾而不是呼叫者想要的位置呢?

總結

小知識點GET了真好,大家以後使用列表控制元件時,是不是疑惑少了一些?

最後

Raymond Chen的《The Old New Thing》是我非常喜歡的部落格之一,裡面有很多關於Windows的小知識,對於廣大Windows平臺開發者來說,確實十分有幫助。

本文來自:《Positioned vs。 non-positioned listview views》

最近我寫了個東西

正如你們所知道的,拓撲梅爾智慧辦公平臺(Topomel Box)是一款綠色軟體,主要面向經常使用電腦的朋友。它提供了各種提升辦公效率的小功能,同時操作上儘可能地簡單方便。

我想:你值得擁有。

關於列表控制元件的定位屬性