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

 


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

 

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

2.  实现:

   

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

private:
	wxString m_desc;
};
 
//MyTreeCtrl继承于 wxTreeCtrl 
class MyTreeCtrl : public wxTreeCtrl
{
public:
	MyTreeCtrl(wxWindow* parent );
	~MyTreeCtrl(){}

	void OnLRBtn(wxTreeEvent& event);
	void OnLeftBtn(wxTreeEvent& event);
	void OnRightBtn(wxTreeEvent& event);
};


2.   cpp 文件

MyTreeCtrl::MyTreeCtrl(wxWindow* parent )
:wxTreeCtrl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_DEFAULT_STYLE|wxTR_HAS_BUTTONS )
{
	wxTreeItemId rootId = this->AddRoot(wxT("工件..."), -1, -1, new MyTreeItemData(wxT("Root")));
	wxTreeItemId childId1 = this->AppendItem( rootId, wxT("左/右向..."), -1, -1, new MyTreeItemData(wxT("Id1")));
	wxTreeItemId childId2 = this->AppendItem( rootId, wxT("左向..."), -1, -1, new MyTreeItemData(wxT("Id2")));
	wxTreeItemId childId3 = this->AppendItem(rootId, wxT("右向..."), -1, -1, new MyTreeItemData(wxT("Id3")));

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

void MyTreeCtrl::OnLRBtn(wxTreeEvent& event)
{
	wxTreeItemId id = event.GetItem();
	if(!id.IsOk())
		return ;
	MyTreeItemData* data = (MyTreeItemData*)GetItemData(id);
	if( data->GetDesc() == wxT("Id1"))
		wxMessageBox(wxT("This is Left and Right Button!"));
	else if( data->GetDesc() == wxT("Id2"))
		wxMessageBox(wxT("This is Left Button!"));
	else if( data->GetDesc() == wxT("Id3"))
		wxMessageBox(wxT("This is Right Button!"));
}


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

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

}


花了好久没想明白,主要是在  在 MainFrame 里面Connect(...)事件,殊不知,事件其实是MyTreeCtrl 里面实现才可以。


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值