2012-12-24 154 views
0

我試圖創建我自己的存儲額外數據的wxTreeItemId版本。下面縫:wxTreeItemId如何獲取數據

TreeItemId.h

#ifndef TREE_CTRL 
#define TREE_CTRL 

#include "wx/treectrl.h" 
#include "Particle System.h" 

class TreeItemId : public wxTreeItemId 
{ 
public: 
    TreeItemId(ParticleSystem* system); 
private: 
    ParticleSystem* particleSystem; 
}; 

TreeItemId.cpp

TreeItemId::TreeItemId(ParticleSystem* system) 
: wxTreeItemId() 
{ 
    particleSystem = system; 

} 

我想用一個事件來獲得所選擇的TreeItem,但我不能工作了使用的一種方式我treeItem類而不是標準。

我想要做的東西的行:

void TopRightPanel::OnSelChanged(wxTreeEvent& event) 
{ 
    TreeItemId *item = (TreeItemId)event.GetItem(); 
} 

這不工作,雖然...任何建議,將不勝感激。我需要使用我自己的wxTreeItemData版本嗎?

回答

1

您應該從wxTreeItemData而不是wxTreeItemId繼承數據對象。 比方說,你有MyItemData : public wxTreeItemData {};然後

wxTreeItemId itemId = event.GetItem(); 
MyItemData * data = (MyItemData *)m_MyTreeCtrl->GetItemData(itemId); 
if(data) { /* Doo what you need here */ } 

爲了設置你需要使用InsertItem()方法,並指定數據對象有項目數據。或者對現有項目使用SetItemData(),並將項目標識和數據對象傳遞給此方法。