﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Lua与C++的故事-随笔分类-Lua</title><link>http://www.cppblog.com/xfpl-at-hotmail-dot-com/category/12217.html</link><description>记录侠客西风的成长</description><language>zh-cn</language><lastBuildDate>Sat, 09 Jan 2010 08:08:33 GMT</lastBuildDate><pubDate>Sat, 09 Jan 2010 08:08:33 GMT</pubDate><ttl>60</ttl><item><title>我的Lua小函数之创建iup菜单</title><link>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2009/11/04/100139.html</link><dc:creator>侠客西风</dc:creator><author>侠客西风</author><pubDate>Wed, 04 Nov 2009 09:14:00 GMT</pubDate><guid>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2009/11/04/100139.html</guid><wfw:comment>http://www.cppblog.com/xfpl-at-hotmail-dot-com/comments/100139.html</wfw:comment><comments>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2009/11/04/100139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xfpl-at-hotmail-dot-com/comments/commentRss/100139.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xfpl-at-hotmail-dot-com/services/trackbacks/100139.html</trackback:ping><description><![CDATA[<p>写在前面:<br>下面的这段代码可以直接在LuaForWindows的Scite中运行,这个函数的是仿照LuaForWindows自带教程中的那个创建iup菜单的函数写的,改进的一个地方是可以用一个消息处理回调函数来响应多个菜单项,然后再统一dispatch,个人认为写法上比直接把进行实际处理的函数写在菜单定义表前面美观一些,<br>说来惭愧,就改写的这个小函数,也是调试了一大会才弄好的,刚接触Lua的时候,就是不熟练啊...(废话? !)<br><br><br>&nbsp; require 'cdlua'<br>&nbsp; require 'iuplua'<br>&nbsp; require 'iupluacd'
<p>&nbsp; function event_handler_g (self)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iup.Message(self.title,'dispatch message')<br>&nbsp; end
<p>&nbsp; function event_handler1 (self)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iup.Message(self.title,'event 1 dispatch message')<br>&nbsp; end<br>&nbsp; function event_handler2 (self)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iup.Message(self.title,'event 2 dispatch message')<br>&nbsp; end<br>&nbsp; function event_handler3 (self)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iup.Message(self.title,'event 3 dispatch message')<br>&nbsp; end
<p>&nbsp; my_menu_test =<br>&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nil,'M1',{event_handler_g,'M11','M12','M13',{event_handler3,'M21','M22',},},'M2',{event_handler_g,'M22','M23',},<br>&nbsp; }
<p>&nbsp; function my_create_menu2(menu_define_table)
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local items={}
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for k,v in pairs(menu_define_table) do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if type(v) == 'function' or type(v)=='nil' then<br>&nbsp; --~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; event_handler=v<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ___my_library__global__event_handler=v<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if type(v) =='string' then<br>&nbsp; --~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local item=iup.item{title=v,action=event_handler}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local item=iup.item{title=v,action=___my_library__global__event_handler}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table.insert(items,item)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if type(v) =='table' then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m1_menu_title=table.remove(items)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local item=iup.submenu {my_create_menu2(v),title=tostring(m1_menu_title.title)}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table.insert(items,item)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end--end of for<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return iup.menu(items)<br>&nbsp; end
<p>&nbsp; my_main_frame=iup.frame<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iup.canvas<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cursor='CROSS',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrollbar='VERTICAL',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; posy=0.0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ymax=0.8,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<p>&nbsp; dlg = iup.dialog<br>&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my_main_frame,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size="HALFxHALF",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title="finally I got the expected result",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; menu=my_create_menu2(my_menu_test),<br>&nbsp; }
<p>&nbsp; dlg:showxy(iup.CENTER,iup.CENTER)
<p>&nbsp; if (not iup.MainLoopLevel or iup.MainLoopLevel()==0) then<br>&nbsp;&nbsp;&nbsp; iup.MainLoop()<br>&nbsp; end</p>
<p>后记,已经发布在了我的粘贴里,不过它上面说是根据时间访问来删除旧帖子的,我怕时间久了这点记忆再没有了</p>
<img src ="http://www.cppblog.com/xfpl-at-hotmail-dot-com/aggbug/100139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xfpl-at-hotmail-dot-com/" target="_blank">侠客西风</a> 2009-11-04 17:14 <a href="http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2009/11/04/100139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>