0

我试图创建我自己的存储额外数据的 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 版本吗?

4

1 回答 1

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()并将项目 ID 和数据对象传递给此方法。

于 2012-12-24T14:23:36.593 回答