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里面实现才可以。
相关文章推荐
- C++自定义ClistCtrl控件响应数据项的点击事件&&消息反射的原理
- Butterknife 绑定控件后,点击事件判断为空,问题解决方法一
- MFC 判断是否从控件本身触发的事件消息
- VC之列表控件点击事件处理
- C# 中 TabPage 控件 点击触发事件
- Android-ListView中嵌套(ListView)控件时item的点击事件不起作用的问题
- android Switch控件一直处于聚焦状态,将屏蔽Preference的点击事件(处理方式)_xp
- Android监听Button等控件的点击事件的三种方法
- Ext.Net.button 和其他控件,实现不同点击事件效果(包括调用自定义控件)
- Android - VGA,ADB,DDMS,安卓开发环境目录结构,安卓目录结构,常见布局,点击事件的几种写法,控件(Button/TextView/ImageView/EditText)
- Asp.net 2.0自定义控件(点击HyperLink后执行事件)[网友问题: DataList里HyperLink控件激发事件,在哪定义?]
- C#判断根据消息判断窗体的事件(WINFROM)
- 在CTreeCtrl控件点击事件中获取点击的项
- VC STATIC控件响应鼠标点击事件
- 透明控件点击事件
- 控件响应鼠标操作事件中,判断IsIdle()作用
- MFC 图片控件图片加载以及鼠标移动事件和鼠标点击事件
- ListView 子控件点击事件对象优化
- 点击listView条目,给点中条目加上上下边框(变换背景),item布局控件的点击事件
- Android控件捕获点击事件的范围