平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0

导航

公告

愿绵泊的悲哀浸透我颓废的一生

围在城里的人想逃出来,城外的人想冲进去,对婚姻也罢,职业也罢,人生的愿望大多如此.

常用链接

留言簿(149)

随笔分类

随笔档案

收藏夹

友情链接

目前常用链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜

WoW的UI脚本对象实现方法

WoW的UI/XML脚本中定义的每个UI对象都可以在lua脚本中使用其名字进行调用,如
GameMenuFrame:Show();    // 方法
local a = checkbutton.isChecked;// 属性

在wow中测试了下,发现:
1.type(GameMenuFrame) == "table"
2.GameMenuFrame has only one field, that is, GameMenuFrame[0] is a userdata
3.GameMenuFrame has metatable, GameMenuFrame[0] has NO metatable.
4.The metatable of GameMenuFrame has only one override field, that is "__index".
5.And that "__index" field is a table contains functions.

So when calling GameMenuFrame:Show(), it calls GameMenuFrame.Show(GameMenuFrame), the GameMenuFrame has not a "Show" field, so it will find it in its metatable's "__index" field, that is:
getmetable(GameMenuFrame)["__index"]["Show"] which refers to a embbed function, the implementation will get the userdata from the GameMenuFrame table. This userdata points to a C memory, or C++ object, or C++ Object pointer, or anything.

For the attribute like 'checkbutton.tooltipText', the tooltipText field is a complete lua variable, created by wow lua script. C/C++ implemetation needs some trouble to read it into binary code and then use it.

posted on 2008-04-02 22:27 linghuye 阅读(2022) 评论(0)  编辑 收藏 引用 所属分类: 编程札记

只有注册用户登录后才能发表评论。