如何為 CTreeCtrl 的每一個 item 設定各自的資料

在 如何讓右鍵單擊 CTreeCtrl 選項時彈出不同的選單

有提過使用 SetItemData() 來設置節點類型

但是如果想要儲存更多的資料,像是字串類型的檔案路徑呢?

這時候也是使用 SetItemData() ,但是此時是要將指向某個 class 的 pointer 設定給他

如此一來就能夠使用我們自己定義好的 class 來儲存和操作資料了

 

[實作過程]

1. 宣告好我們要使用的 class,這裡有儲存檔案路徑的 hFilePath 和之前用來決定節點層級的 hLevel

class CTreeItemData {
private:
	CString hFilePath;
	int hLevel;
public:
	CTreeItemData(int lev, CString str="") { hLevel = lev; hFilePath = str; }
	~CTreeItemData() {  } 
	int getLevel() { return hLevel; }
	CString getPathName() { return hFilePath; }
};

2. 使用 SetItemData() 和 GetItemData() 存取 new 出來的 object

// 使用 SetItemData() 設定 hLevel 和 hFilePath 
HTREEITEM hFile = m_wndTree.InsertItem(fileName.c_str(), hParent);
CTreeItemData* pStore = new CTreeItemData(3,fd.GetPathName());
m_wndTree.SetItemData(hFile, (DWORD) pStore);

// 使用 GetItemData() 取得 hLevel 和 hFilePath 
CTreeItemData* pStore = (CTreeItemData*) m_wndTree.GetItemData(hSelectItem);
int hLevel = pStore->getLevel;
CString filePath = pStore->getPathName();

 

[參考資料]

如何为CTREECTRL的每一个ITEM指定自己的数据