2012-08-05 121 views
2

我正在使用WIN32 APIs實現一個項目,其中我需要某些基於某些數據的運行時樹視圖項目可見/不可見由用戶輸入。我做了一些工作,發現我可以在樹視圖控件中添加/刪除項目,但無法找到任何設置項目可見或不可見的地方(我發現了一些可以通過MFC完成的示例)。如何使用Win32 api設置樹視圖項目爲可見/不可見

我在尋找將它們設置爲可見/不可見的方式,這很簡單,因爲當我添加一個項目時,它需要大量的後端計算,重複的添加或刪除操作會導致性能問題。我只想在每個樹視圖項目中只進行一次計算。

其中一個解決方案,我認爲,如果設置樹視圖項目是不可能的,只是簡單地存在樹視圖項目的鏈接列表,並且僅添加/刪除需要可見的項目/無形。

請告訴我是否可以將樹狀視圖項目的狀態設置爲可見/不可見,如果是,那該怎麼辦?如果不是,可以採用其他備用解決方案嗎?

+0

Imho,你沒有提到另一種方式(添加/刪除)。 – Maximus 2012-08-05 21:17:33

+0

保留樹視圖項目中顯示的數據的單獨緩存。如果您需要重新創建之前已刪除的項目,則可以便宜地從緩存中檢索數據。根據您的數據,您可能可以使用簡單的'std :: map'作爲緩存,或者您可能需要某種樹。 – arx 2012-08-05 21:56:38

+0

您是否嘗試使用'TVM_GETITEMRECT'消息來勾勒「隱藏」項目上的邊界矩形?請注意,您需要掛鉤其他消息才能防止選擇「隱藏」項目。 – Jay 2012-08-06 00:43:58

回答

5

標準的TreeView控件沒有任何節點可見性的概念。添加/刪除節點是唯一的選擇。您將不得不維護節點顯示的數據的單獨鏈接列表緩存(無論如何,您應該這樣做,以便將您的UI邏輯與業務邏輯分開)。否則,您需要編寫自己的TreeView控件,或者找到適合您需求的第三方實現。

相關問題