无法将 EVT_COMMAND 从一个类发送到另一类
我刚刚开始使用 wxWidgets,但遇到了问题。
我有一个主窗口和另一个从 wxDialog 派生的类。主窗口以非模式模式启动对话框。当对话框关闭时,它会发布一个事件,但该事件的处理程序永远不会被调用。
我正在使用 wxWidgets 3.1.5
上面的两个类共享一个公共头文件,其中我有这样的代码
wxDECLARE_EVENT(EVT_VISOR, wxCommandEvent);
这是我的事件表
BEGIN_EVENT_TABLE(VisorFrame, wxFrame)
....
EVT_COMMAND(ID_DlgDisplayLogsTerminated, EVT_VISOR, VisorFrame::OnDlgDisplayLogsTerinated)
....
END_EVENT_TABLE()
在从 wxDialog 派生的类中,我的文件顶部有这个
wxDEFINE_EVENT(EVT_VISOR, wxCommandEvent);
这是我的事件处理程序
void
VisorFrame::OnDlgDisplayLogsTerinated(wxCommandEvent& event)
{
wxPuts(_("VisorFrame::OnDlgDisplayLogsTerinated ent"));
}
最后,这是我如何发布我的活动
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();
}
我已遵循文档,但我一定做错了什么!
I'm just starting with wxWidgets and I've run into a problem.
I have a mainwindow and another class derived from wxDialog. The main window launches the dialog box in non-modal mode. When the dialog closes, it posts an event but the handler for this event never gets called.
I'm using wxWidgets 3.1.5
The above two classes share a common header file, in which I have this code
wxDECLARE_EVENT(EVT_VISOR, wxCommandEvent);
This is my event table
BEGIN_EVENT_TABLE(VisorFrame, wxFrame)
....
EVT_COMMAND(ID_DlgDisplayLogsTerminated, EVT_VISOR, VisorFrame::OnDlgDisplayLogsTerinated)
....
END_EVENT_TABLE()
In the class derived from wxDialog, I have this at the top of my file
wxDEFINE_EVENT(EVT_VISOR, wxCommandEvent);
This is my event handler
void
VisorFrame::OnDlgDisplayLogsTerinated(wxCommandEvent& event)
{
wxPuts(_("VisorFrame::OnDlgDisplayLogsTerinated ent"));
}
And finally, this is how I post my event
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();
}
I have followed the documentation but I must be doing something wrong!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想你已经快到了。我认为您可以做的是将
wxFrame
作为父级传递给无模式对话框,并通过父级发布事件。在您的
wxFrame
事件表中:I think you're nearly there. I think what you could do is pass the
wxFrame
as a parent to your modeless dialog and post the event via the parent.And in your
wxFrame
event table: