The wxWidnows library is one of the best open source libraries for developing cross-platform user interface. Its API for event handling makes it very easy to embed a scripting language for creating widgets.
Upon startup, the widget program "zsw.exe" creates a main frame window and then executes the ZeScript file "zsw.zs". The script should first obtain the main frame and then add menubar, toolbar, or controls in it. For instance,
frame = wxframe(); a = frame.menubar("&File", "&Item-1\tCtrl-I", "_", "I&tem-2\tCtrl-t", ">", "Submenu", "&Sub-1\tCtrl-S", "S&ub-2\tCtrl-u", "<", "It&em-3\tCtrl-e"); b = frame.menubar("&Help", "&About\tCtrl-A"); na = size(a); nb = size(b); for (i = 0; i < nb; i++) a[na+i] = b[i]; frame = wxcast(frame); frame.push("event_handler", "menu", a); function event_handler(id) { s = " " + id; wxmsg(s); }
You may have noticed that in the reference the function push() is registered to the base window; therefore if we want to push a event-handling callback function to handle menu event in the main frame, we have to cast the frame from the top window type to the base window type.