gpt4 book ai didi

c++ - 使用 Bind 创建处理程序函数以处理单击的菜单项 - wxWidgets 3.0

转载 作者:行者123 更新时间:2023-11-28 02:47:45 24 4
gpt4 key购买 nike

我想知道如何使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com