﻿<?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++的故事</title><link>http://www.cppblog.com/xfpl-at-hotmail-dot-com/</link><description>记录侠客西风的成长</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:07:40 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:07:40 GMT</pubDate><ttl>60</ttl><item><title>声明:关闭这个博客</title><link>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2010/03/11/109420.html</link><dc:creator>侠客西风</dc:creator><author>侠客西风</author><pubDate>Thu, 11 Mar 2010 03:59:00 GMT</pubDate><guid>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2010/03/11/109420.html</guid><wfw:comment>http://www.cppblog.com/xfpl-at-hotmail-dot-com/comments/109420.html</wfw:comment><comments>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2010/03/11/109420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xfpl-at-hotmail-dot-com/comments/commentRss/109420.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xfpl-at-hotmail-dot-com/services/trackbacks/109420.html</trackback:ping><description><![CDATA[
<div>由于此博客不让发表任何关于政治的内容,故关闭之.</div><img src ="http://www.cppblog.com/xfpl-at-hotmail-dot-com/aggbug/109420.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> 2010-03-11 11:59 <a href="http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2010/03/11/109420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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>7</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><item><title>xp下WS_EX_COMPOSITED问题总结</title><link>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2009/10/10/98261.html</link><dc:creator>侠客西风</dc:creator><author>侠客西风</author><pubDate>Sat, 10 Oct 2009 09:53:00 GMT</pubDate><guid>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2009/10/10/98261.html</guid><wfw:comment>http://www.cppblog.com/xfpl-at-hotmail-dot-com/comments/98261.html</wfw:comment><comments>http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2009/10/10/98261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xfpl-at-hotmail-dot-com/comments/commentRss/98261.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xfpl-at-hotmail-dot-com/services/trackbacks/98261.html</trackback:ping><description><![CDATA[<p><span style="background: black; color: blue">#if</span><span style="background: black; color: red">(</span><span style="background: black; color: #fefffe">_WIN32_WINNT</span><span style="background: black; color: red">&gt;=</span><span style="background: black; color: #f5cb03">0x0501</span><span style="background: black; color: red">) <br></span><span style="background: black; color: blue">#define</span><span style="background: black; color: #fefffe">WS_EX_COMPOSITED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="background: black; color: #f5cb03">0x02000000L <br></span><span style="background: black; color: blue">#endif</span><span style="background: black; color: green">/* _WIN32_WINNT &gt;= 0x0501 */</span></p> <p>准备把语言写的精炼一些,这样节省作者和读者的时间.</p> <p>相关资料:这里不再摘录,请自行查看msdn</p> <p>问题描述:在窗口使用了<span style="background: black; color: #fefffe">WS_EX_COMPOSITED </span>风格后,绘图就会变得不正常了,原因是xp特有的双缓冲绘图机制(可能后续版本Windows没有,参考<span style="background: black; color: #fefffe">WS_EX_COMPOSITED </span>风格的定义,在msdn里)的bug(应该算是一个系统的bug)</p> <p>问题1:GetDC系绘图API不可用,表现为画出来的内容会被立即刷新掉,这个应该不算bug,</p> <p>解决方法:</p> <p>把所有的绘图操作放到<span style="background: black; color: #fefffe">WM_ERASEBKGND和</span><span style="background: black; color: #fefffe">WM_PAINT</span>消息处理函数里,这个应该满足大多数情况下的要求,特殊情况可以使用加bool标志的方法在这两个函数里面绘图,然后在需要使用GetDC的地方设置bool标志</p> <p>问题2:即使在上述的两个消息handler里面,GDI+绘图操作还是无法正常工作,而同一个消息处理函数里面的GDI函数就可以工作,这个问题msdn论坛上有人问过,也给出了解决方案,我试了一下果然ok,这个问题应该是GDI+函数内部的问题,具体原因不明</p> <p>解决方法:</p> <p>使用内存dc绘图.创建内存兼容dc,然后把这个内存兼容dc传给GDI+,绘图完成后,bitblt到原dc</p> <p>至此,xp下的系统双缓冲窗口可以正常工作了,也使用GDI+来绘图了.</p> <p>本文为侠客西风原创,请尊重别人劳动成果,如果转载引用请保留作者出处,谢谢合作.</p><img src ="http://www.cppblog.com/xfpl-at-hotmail-dot-com/aggbug/98261.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-10-10 17:53 <a href="http://www.cppblog.com/xfpl-at-hotmail-dot-com/archive/2009/10/10/98261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>