我尝试创建自己的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吗?
您应该从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(),并将项目ID和数据对象传递给该方法。