我想了解如何执行特定任务。我试图在 wxWidgets 中设置事件表,但遇到了它们的行为问题。
我在一个类中设置了一些代码:
void TopRightPanel::OnSelChanged(wxTreeEvent& event)
{
wxTreeItemId item = event.GetItem();
TreeItemData* data = (TreeItemData *) GetItemData(item);
if(data != NULL)
{
particleSystemManager->SetSelectedParticleSystem(data->particleSystem);
}
}
这工作正常,并且具有预期的正确值。不过我的问题是它是自包含的,我希望层次结构中它上面的类读取treeCtrl的操作并对UI的所有方面进行更改所以我尝试了这个:
void Window::OnSelChanged(wxTreeEvent& event)
{
wxTreeItemId item = event.GetItem();
TreeItemData* data = (TreeItemData *) topRightPanel->GetItemData(item);//item.m_pItem.//m_MyTreeCtrl->GetItemData(itemId);*/
if(data != NULL)
{
particleSystemManager.SetSelectedParticleSystem(data->particleSystem);
}
}
现在,当调用 topRightPanel->GetItemData(data) 时,我得到一个未处理的异常。它使用的 topRightPanel 似乎没有更新,并且似乎在它在类的构造函数中实例化之前指向数据。无论如何我可以解决这个问题吗?
编辑:
我像这样声明事件表:
#if USE_GENERIC_TREECTRL
BEGIN_EVENT_TABLE(TopRightPanel, wxGenericTreeCtrl)
#else
BEGIN_EVENT_TABLE(TopRightPanel, wxTreeCtrl)
#endif
EVT_TREE_SEL_CHANGED(TopRightPanel_Ctrl, Window::OnSelChanged)
END_EVENT_TABLE()
然后我使用 DECLARE_EVENT_TABLE 在标题中声明表。