这一篇就开始讲wxlua的使用了,wxlua可以集成在你的C++程序里,
也可以当成一个独立的库给lua调用。
我这里假设你已经有一些lua基础,了解面向对象编程。
本系列托管在github上
wxlua本质是lua脚本,用lua解释器可以成功运行,因为需要载入wx库,
所以wx库文件要放在lua可以寻找到的地方。通常放在程序根目录,在别的地方要设置好
package.cpath
变量。
运行lua -e "require('wx')"
无错误提示说明成功。
在当前目录下新建一个lua文件,将下列代码复制进去
require("wx")
frame = wx.wxFrame( wx.NULL, wx.wxID_ANY, "wxLua Very Minimal Demo" )
frame:Show(true)
wx.wxGetApp():MainLoop()
另存为test.lua,命令行lua test.lua
将弹出一个无内容的窗口。
我们要使用wxlua库当然要载入wx库啦,所以第一行就是载入wx库用的。
一个图形程序都要有一个窗口,第二行就是创建窗口(也称为框架 frame。主窗口除了框架外还可以是对话框dialog)
有了窗口要让它显示对吧,就是第三行的作用。
注::
号是lua中的一个语法糖,frame:Show(true)
等价于frame.Show(frame,true)
就是把它本身当作一个参数传递进去。这样的写法更符合C++中写法frame->Show(true);
.
为什么创建的窗口不会自动弹出而要设置呢,因为在一个实际的项目中,窗口不只一个,如果每创建一个窗口都自动弹出的话,程序打开时那不就会有一大推窗口了?所以调用这个函数在需要时,更符合实际。
每一个窗口程序不可能在所有的时间都在运算,它的大部分时间都在等待事件的发生,
之后调用对应的事件处理函数处理事件。
wx.wxGetApp():MainLoop()
函数就是用来进入等待模式的,一个主循环,判断有无事件的发生,反正记住,这个函数在每一个wxlua程序里通常只能出现一次且在代码最后调用。
一个框架类,是大部分控件的容器,用来放置控件的。
wxFrame(wxWindow* parent, wxWindowID id, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "wxFrame")
parent:框架的父窗口,也是大部分控件所必须的一个参数,默认是wx.NULL(空),
那么这个窗口称为顶级窗口。
id 每一个控件的唯一标识符,是一个数字,也是大部分控件所必须的一个参数,-1 代表由系统自动生成。
title 窗口标题
pos 位置,就是窗口左上角与显示屏左上角的坐标,类型为wxPoint,可以用函数wxPoint(x,y)创建。
size 大小,类型为wxSize,用wxSize(x,y)创建
style 窗口风格,具体的去看wxwidget参考手册,
(注: 参考手册中关于风格的|号在lua中用+号代替,^用-号代替)
name 名字,用来追踪bug用的)