我正在将 Lua 脚本添加到我们的应用程序中,并且我需要为 GUI 工具包实现绑定。我们使用的工具包是 wxWidgets。
我正在使用 Lua 5.1 和 luabind 0.9.1,到目前为止效果很好。但是,我不确定如何最好地处理事件。例如,如果您想创建一个按钮并在单击它时打印一个字符串,您可以在 C++ 中编写类似这样的内容
class MyClass : public wxFrame
{
MyClass (...)
{
b = new wxButton (this, -1, "Click me");
b->Bind (wxEVT_COMMAND_BUTTON_CLICKED, &MyClass::HandleButtonClick, this);
}
void HandleButtonClick (wxCommandEvent& ev)
{
wxMessageBox ("You clicked me");
}
}
我在 Lua 中做同样事情的梦想 API 看起来像这样:
b = wx.Button (frm, -1, "Click me")
b.on_click = function (ev)
print ("Button clicked")
end
或者,允许多个事件处理程序:
b.on_click:add (function (ev)
print ("Button clicked again ...")
end)
如果不可能,像这样更类似于 C++ API 的东西:
b.bind (wx.EVT_COMMAND_BUTTON_CLICKED, function (ev)
print ("Yet again")
end)
但是,我不确定如何使用 Luabind 来实现这一点,而无需为我想要使用的 wxWidgets-library 中的每个类编写包装类。
有什么建议么?
也许 Luabind 可以以某种方式自动创建辅助类(比如“wxLuaEventPropagator”)?这样 wxButton 类对于每个事件(“on_click”等)都有一个嵌套的 wxLuaEventPropagator 类。再一次,我不想为我使用的 wxWidgets 中的每个类创建包装类,因为有很多。
(是的,我知道 wxLua)