wxWidgets通用事件处理程序

时间:2019-04-05 10:22:11

标签: events wxwidgets

使用wxSmith,我有一个带有许多按钮的对话框,这些按钮需要相同的事件处理程序,但是当然要作用于自己的数据实例。

使用C ++ Builder的时候,我会在小部件的标签字段中放置一个identifer字符串。然后,我将有一个函数来迭代所有小部件,并使用字符串作为构造函数来创建一个自定义对象,并将指向该对象的指针放在标记字段中。

这样,通用事件处理程序可以简单地将tag字段转换为一个自定义特定实例,该实例知道如何处理该事件。

其他GUI API(例如Visual Basic)更为简单,但允许使用控件数组或索引,并且通过引用索引来调用事件,因此这种情况仍然适用于数组。

到目前为止,我唯一能看到将附加信息与wxWidget关联的方法是将其插入我自己的自定义控件中,但我担心这会破坏与wxSmith的兼容性。

有人知道这样做的优雅方法吗?

1 个答案:

答案 0 :(得分:4)

一个简单的处理方法就是使用通用事件处理程序。 只需将所有按钮事件连接(绑定)到对话框的相同功能(方法)即可:

Bind(wxEVT_BUTTON, TheDialog::OnButtonClicked, this);

在相应的事件处理程序中,您可以使用 event.GetEventObject()检索相关按钮,如果您使用 event.GetId()知道它的ID,则可以检索其按钮ID。 / strong>。

问候 Xav'