2011-04-13 72 views
0

我想顯示多個圖標到Treeview項目,但它不顯示所有的圖標,它只顯示一個。 我使用下面的代碼:如何將多個圖標添加到單個TreeView項目?

CImageList m_imageState; 
m_cTree.m_imageState.Create(16, 16, ILC_MASK, 0, 4); 
m_cTree.m_imageState.Add(&bm, RGB(255,255,0)); 
m_cTree.m_imageState.Add(&bm2, RGB(255,0,255)); 
m_cTree.m_imageState.Add(&bm, RGB(255,255,0)); 
m_cTree.m_imageState.Add(&bm1, RGB(0,255,255)); 
m_cTree.SetImageList(&(m_cTree.m_imageState), TVSIL_NORMAL); 

但是,當我看到樹視圖,項目只顯示一個圖標。 是否可以使用Treeview項目顯示多個圖標?

請建議我該如何做到這一點。

回答

1

正確,在TreeView控件中每個項目只會顯示一個圖標。這是設計,MFC庫包裝本地控制的一個硬性限制。

要使每個項目能夠顯示多個圖標的唯一方法是owner drawing。對於TreeView控件來說,這是一項相當困難的任務,並不像擁有者繪製按鈕或標籤控件那樣容易。確保你真的需要這個功能,並考慮是否有更好的方式向用戶顯示相關信息。

或者,您可以創建自定義位圖,將多個圖像相鄰合併,然後將這些圖像添加到您的ImageList。生成的圖像會比高度更寬,但控件不關心:只要圖像列表中的所有圖像具有相同的尺寸,它就會顯示您指定的任何尺寸的圖像。這絕對是一個黑客,但它可能會工作,這取決於您的需求。

+0

感謝您的回覆... 在我的情況下,位圖是不同的圖標,所以我不認爲我可以將多個圖像相鄰。所以我認爲我需要放棄顯示多個圖像的計劃。 – Nikhil 2011-04-13 06:02:48

+0

@Nikhil:嗯,你可以在內存中繪製各個圖標到位圖中,然後將該位圖加載到'ImageList'中。如果您不需要更改經常顯示的圖標,那就可以正常工作。例如,當您的應用程序首次加載時,您可以在一個新的內存位圖中將3個16x16圖標相鄰放置,然後創建一個48x16位圖,然後將該位圖分配給'ImageList'。但是,如果這不適合你,我肯定會放棄。我無法想象這樣一種情況:爲了獲取多個圖標,所有者繪製TreeView是值得的。 – 2011-04-13 06:11:00

+0

我的Treeview可以包含成千上萬的項目,並且圖標對於每個Treeview項目可以是不同的。因此,在這種情況下,我覺得新內存位圖中的繪圖圖像會是一個代價高昂的操作? – Nikhil 2011-04-13 06:48:25

相關問題