您的位置:首页 > 其它

wxWidgets 树状控件(wxTreeCtrl)点击各子项事件消息的判断

2013-04-19 15:57 387 查看


首先说点题外话,光是这个小问题,浪费了我两天的时间,不过还好,分离开了就是进步!



1.wxTreeCtrl是一个树状控件类,分层显示,每一个项(对应一个wxTreeItemId)可以设置一个文本编辑和一个图标。其他介绍网上很多不说了。

2.实现:



//MyTreeItemData继承于wxTreeItemData,我主要是用来给给一个子项一个字符串标识
classMyTreeItemData:publicwxTreeItemData
{
public:
MyTreeItemData(constwxString&desc):m_desc(desc){}
constwxString&GetDesc()const{returnm_desc;}

private:
wxStringm_desc;
};
//MyTreeCtrl继承于wxTreeCtrl
classMyTreeCtrl:publicwxTreeCtrl
{
public:
MyTreeCtrl(wxWindow*parent);
~MyTreeCtrl(){}

voidOnLRBtn(wxTreeEvent&event);
voidOnLeftBtn(wxTreeEvent&event);
voidOnRightBtn(wxTreeEvent&event);
};


2.cpp文件

MyTreeCtrl::MyTreeCtrl(wxWindow*parent)
:wxTreeCtrl(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxTR_DEFAULT_STYLE|wxTR_HAS_BUTTONS)
{
wxTreeItemIdrootId=this->AddRoot(wxT("工件..."),-1,-1,newMyTreeItemData(wxT("Root")));
wxTreeItemIdchildId1=this->AppendItem(rootId,wxT("左/右向..."),-1,-1,newMyTreeItemData(wxT("Id1")));
wxTreeItemIdchildId2=this->AppendItem(rootId,wxT("左向..."),-1,-1,newMyTreeItemData(wxT("Id2")));
wxTreeItemIdchildId3=this->AppendItem(rootId,wxT("右向..."),-1,-1,newMyTreeItemData(wxT("Id3")));

Connect(this->GetId(),wxEVT_COMMAND_TREE_ITEM_ACTIVATED,wxTreeEventHandler(MyTreeCtrl::OnLRBtn),NULL,NULL);

}

voidMyTreeCtrl::OnLRBtn(wxTreeEvent&event)
{
wxTreeItemIdid=event.GetItem();
if(!id.IsOk())
return;
MyTreeItemData*data=(MyTreeItemData*)GetItemData(id);
if(data->GetDesc()==wxT("Id1"))
wxMessageBox(wxT("ThisisLeftandRightButton!"));
elseif(data->GetDesc()==wxT("Id2"))
wxMessageBox(wxT("ThisisLeftButton!"));
elseif(data->GetDesc()==wxT("Id3"))
wxMessageBox(wxT("ThisisRightButton!"));
}


3.MainFrame使用MyTreeCtrl创建对象,加入布局;

MainFrame::MainFrame(...)
{
....
MyTreeCtrl*m_trcMsg=newMyTreeCtrl(m_plTreeCtrl);
m_bsTreeCtrl->Add(m_trcMsg,1,wxEXPAND|wxALL,0);
m_plTreeCtrl->SetSizer(m_bsTreeCtrl);
m_plTreeCtrl->Layout();
....

}


花了好久没想明白,主要是在在MainFrame里面Connect(...)事件,殊不知,事件其实是MyTreeCtrl里面实现才可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: