2012-12-24 133 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(),并将项目标识和数据对象传递给此方法。