作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何使用 Bind 函数在 wxWidgets 3.0 中创建一个简单的事件处理程序,C++。
为了开始我的实验,我创建了一个非常简单的应用程序 - 一个带有菜单的主框架和菜单中的几个项目。到目前为止没有问题,一切都按预期出现。我使用的部分代码是:
//create a menu bar
wxMenuBar* mbar = new wxMenuBar();
wxMenu* fileMenu = new wxMenu(_T(""));
fileMenu->Append(item1, _("&Item_1"), _("Select item 1"));
mbar->Append(fileMenu, _("&File"));
现在我想使用 Bind 创建一个简单的处理程序,它会在从菜单中选择 Item_1 时弹出一个消息框,例如:
wxMessageBox( "You have selected Item 1", "Your selection", wxOK | wxICON_INFORMATION );
请注意,弹出消息框只是我选择的一个简单示例,以便快速掌握概念并查看结果。如果可能,我希望 Bind 事件处理程序尽可能通用,适用于任意事件和操作。
最佳答案
#include <wx/wx.h>
#define item1 (wxID_HIGHEST + 1)
class CApp : public wxApp
{
public:
bool OnInit() {
// Create the main frame.
wxFrame * frame = new wxFrame(NULL, wxID_ANY, "demo");
// Create a menu bar.
wxMenuBar* mbar = new wxMenuBar();
wxMenu* fileMenu = new wxMenu(_T(""));
fileMenu->Append(item1, _("&Item_1"), _("Select item 1"));
mbar->Append(fileMenu, _("&File"));
frame->SetMenuBar(mbar);
// Bind an event handling method.
#if __cplusplus < 201103L
frame->Bind(wxEVT_MENU, &CApp::item1_OnMenu, this, item1);
#else
frame->Bind(wxEVT_MENU, [](wxCommandEvent & evt)->void{
wxMessageBox("You have selected Item 1", "Your selection", wxOK | wxICON_INFORMATION);
}, item1);
#endif
// Enter the message loop.
frame->Show(true);
return this->wxApp::OnInit();
}
#if __cplusplus < 201103L
protected:
void item1_OnMenu(wxCommandEvent & evt) {
wxMessageBox("You have selected Item 1", "Your selection", wxOK | wxICON_INFORMATION);
}
#endif
};
DECLARE_APP(CApp)
IMPLEMENT_APP(CApp)
wxEvtHandler::Bind
方法有 3 个重载。以上只展示了其中的2个。
关于可用的事件类型,这将是Bind
的第一个参数,请引用wx/event.h。 event.h 还告诉我们应该使用哪个事件类。例如,
#define EVT_MENU(winid, func) wx__DECLARE_EVT1(wxEVT_MENU, winid, wxCommandEventHandler(func))
注意wxCommandEventHandler
,去掉后缀Handler
,剩下的就是事件类wxCommandEvent
。
关于c++ - 使用 Bind 创建处理程序函数以处理单击的菜单项 - wxWidgets 3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23851051/
我是一名优秀的程序员,十分优秀!