wxlua | 最小界面程序

Posted 自科部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wxlua | 最小界面程序相关的知识,希望对你有一定的参考价值。

说明:

这一篇就开始讲wxlua的使用了,wxlua可以集成在你的C++程序里,也可以当成一个独立的库给lua调用。

我这里假设你已经有一些lua基础,了解面向对象编程。

相关链接

维基面向对象页面https://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1wxlua官网http://wxlua.sourceforge.net

如何运行wxlua程序

wxlua本质是lua脚本,用lua解释器可以成功运行,因为需要载入wx库,所以wx库文件要放在lua可以寻找到的地方。通常放在程序根目录,在别的地方要设置好package.cpath变量。

运行lua -e "require('wx')"无错误提示说明成功。

创建一个最小的wxlua程序

在当前目录下新建一个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程序里通常只能出现一次且在代码最后调用。

关于Frame类

一个框架类,是大部分控件的容器,用来放置控件的。

构造函数

  
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用的)

这篇文章写于2014年12月,当时水平有限,且wxlua更新换代的速度快,可能有错漏,欢迎指出。

以上是关于wxlua | 最小界面程序的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

如何在 BottomNavigationView 的片段上打开搜索界面?

界面最小化时热键不起作用

从单个按钮从多个片段中提取数据

“不要保留活动” - 当应用程序恢复时,片段仅可见一秒钟

从图库中选择照片(onActivityResult()问题 - 我想是这样) - 片段Android