无法将 EVT_COMMAND 从一个 class 发送到另一个
Unable to send EVT_COMMAND from one class to another
我刚开始使用 wxWidgets,但 运行 遇到了问题。
我有一个 mainwindow 和另一个从 wxDialog 派生的 class。 main window 以非模态模式启动对话框。当对话框关闭时,它 post 是一个事件,但永远不会调用此事件的处理程序。
我正在使用 wxWidgets 3.1.5
以上两个class共享一个头文件,我在里面有这段代码
wxDECLARE_EVENT(EVT_VISOR, wxCommandEvent);
这是我的活动table
BEGIN_EVENT_TABLE(VisorFrame, wxFrame)
....
EVT_COMMAND(ID_DlgDisplayLogsTerminated, EVT_VISOR, VisorFrame::OnDlgDisplayLogsTerinated)
....
END_EVENT_TABLE()
在派生自 wxDialog 的 class 中,我在文件顶部有这个
wxDEFINE_EVENT(EVT_VISOR, wxCommandEvent);
这是我的事件处理器
void
VisorFrame::OnDlgDisplayLogsTerinated(wxCommandEvent& event)
{
wxPuts(_("VisorFrame::OnDlgDisplayLogsTerinated ent"));
}
最后,这就是我 post 我的活动
void
DlgDisplayLogs::OnClose(wxCloseEvent& ev)
{
wxPuts(_("send event"));
wxCommandEvent event(EVT_VISOR, ID_DlgDisplayLogsTerminated); // enum value
event.SetEventObject(this);
event.SetString("Hello");
QueueEvent(event.Clone());
ev.Skip();
}
我已按照文档进行操作,但我一定是做错了什么!
我想你快到了。我认为您可以做的是将 wxFrame
作为父项传递给您的无模式对话框,并通过父项 post 传递事件。
wxCommandEvent event(EVT_VISOR, ID_DlgDisplayLogsTerminated);
event.SetEventObject(this);
event.SetString("Hello");
wxPostEvent(frameParentPtr, event);
在你的 wxFrame
活动中 table:
EVT_COMMAND(wxID_ANY, EVT_VISOR, VisorFrame::OnDlgDisplayLogsTerinated)
我刚开始使用 wxWidgets,但 运行 遇到了问题。
我有一个 mainwindow 和另一个从 wxDialog 派生的 class。 main window 以非模态模式启动对话框。当对话框关闭时,它 post 是一个事件,但永远不会调用此事件的处理程序。
我正在使用 wxWidgets 3.1.5
以上两个class共享一个头文件,我在里面有这段代码
wxDECLARE_EVENT(EVT_VISOR, wxCommandEvent);
这是我的活动table
BEGIN_EVENT_TABLE(VisorFrame, wxFrame)
....
EVT_COMMAND(ID_DlgDisplayLogsTerminated, EVT_VISOR, VisorFrame::OnDlgDisplayLogsTerinated)
....
END_EVENT_TABLE()
在派生自 wxDialog 的 class 中,我在文件顶部有这个
wxDEFINE_EVENT(EVT_VISOR, wxCommandEvent);
这是我的事件处理器
void
VisorFrame::OnDlgDisplayLogsTerinated(wxCommandEvent& event)
{
wxPuts(_("VisorFrame::OnDlgDisplayLogsTerinated ent"));
}
最后,这就是我 post 我的活动
void
DlgDisplayLogs::OnClose(wxCloseEvent& ev)
{
wxPuts(_("send event"));
wxCommandEvent event(EVT_VISOR, ID_DlgDisplayLogsTerminated); // enum value
event.SetEventObject(this);
event.SetString("Hello");
QueueEvent(event.Clone());
ev.Skip();
}
我已按照文档进行操作,但我一定是做错了什么!
我想你快到了。我认为您可以做的是将 wxFrame
作为父项传递给您的无模式对话框,并通过父项 post 传递事件。
wxCommandEvent event(EVT_VISOR, ID_DlgDisplayLogsTerminated);
event.SetEventObject(this);
event.SetString("Hello");
wxPostEvent(frameParentPtr, event);
在你的 wxFrame
活动中 table:
EVT_COMMAND(wxID_ANY, EVT_VISOR, VisorFrame::OnDlgDisplayLogsTerinated)