今天完成了右键弹出菜单的插件扩展框架支持,基本上没有遇到什么障碍,跟原来想的一样简单。
除了这个,还把菜单、工具栏的插件扩展支持功能的代码重构了一遍,把这部分功能提取成一个独立的类,在类中完成插件扩展的相关功能,只有最终的事件消息响应函数仍然放在界面类中,这是因为才发现不是随便一个类的成员函数都可以绑定成事件处理器的。
顺便说个可能是wxWidgets的bug,动态创建的菜单,动态添加的菜单项,第一个图标总是显示不出来!
再一个是原本用SWIG生成的文件,我把它直接作为头文件,包含在另一个源文件中,而该源文件因为某些原因,经常会被重新编译,而恰恰这SWIG生成的文件体积巨大(超过25000行),所以编译要花不少时间。于是又仔细看了一下生成的这个文件,发现其实最终只是需要一个 luaopen_libname的函数,这样SWIG生成的文件就可以作为源文件了,不用跟着其他文件编译了。
今天修改了插件扩展的描述方式,把菜单项、工具栏按钮的标题、路径和帮助文本,工具栏按钮的图片等信息,全都写到xml描述文件中,这样一弄,lua 脚本确实精简了很多。到现在为止,已经可以正常地通过插件扩展实现主菜单和工具栏的点击响应了,如果要说更新界面状态,也不是很麻烦,也就是多添加一个消息连接而已。
再说右键弹出菜单,我粗略地想了想,应该不是很麻烦,也就是添加到各自的扩展点下即可。其实直到现在,我才想起来,我这种实现方式,其实应该跟 Windows传统的GUI资源编程基本思路是一样的。主菜单用一个编号标识,然后是菜单项信息,需要足够多的信息可以标识出菜单项的位置(路径),然后是给菜单项添加消息响应。工具栏的实现也是类似,所以如果要支持右键弹出菜单,也沿用那套思路就行了。
昨天说到,如果在插件扩展中使用wxLua,那么wxLua不能使用宿主程序使用的wxWidgets二进制文件,于是我今天想用IUP来试试。我从 CVS里取出IUP的代码,然后用MinGW编译出所有的dll文件,可是用的时候发现总是报IupClipboard符号在指定的dll中找不到,而我用depends看是有的,郁闷!但是用LuaForWindows里的dll是可以的,可是它是用VS2005编译的,要带一个VC2005的 redist,不爽啊!
另外一个问题是,本来以为脚本扩展时用了wxLua,而宿主程序也用了wxWidgets,两个之间可以无阻碍地互相使用各种控件,今天才发现,当时太想当然了。我用SWIG封装了宿主程序中的一些代码,比如wxFrame,在wxLua中是不认识这种封装的,两种不是相同的类型。所以现在只能精心挑选一组必需的,常用的代码来用SWIG封装,现在让它生成的包括scintilla和scilexer以及wxcintilla的声明后,生成的文件有近 30000行,编译要花不少时间。说起来,我应该再仔细研究一下SWIG的用法先。
这两天用wxWidgets,有时候感觉它比MFC、VCL要灵活,比WTL要易懂。这也许很偏面。不过我最不满的是它的资料太少,以及运行效率不高。
这两天又用wxWidgets,不得不感叹一下,资料实在太少了,只有一个现成的manual,其他时候就只有看看CodeLite、Code::Blocks的源代码了!
到今天为止,修改了脚本扩展的功能,可以在一个描述文件中定义多个扩展的信息。对于主菜单来说,倒是勉强够用了,不过当时因为想让描述文件中对扩展的描述尽量通用,将其他的信息都写到脚本里去了,现在看来如果要对工具栏也使用脚本扩展,那么这种方式实在太不方便了点,还是应该把这种静态配置信息的都放在xml格式的描述文件中,脚本中应该只有动态的逻辑。所以还需要修改。
今天又忘了,wxWidgets的程序如果使用Lua扩展,而扩展又装载wxLua的话,wxLua的二进制文件不能用和wxWidgets程序相同的wxWidgets二进制动态链接库,不然会出现各种奇怪的问题。这是让我目前比较头痛的问题。我现在是用MinGW来编译wxWidgets和相关工程,那么一来wxLua就只能用VC或其他编译器编译了,但我今天试了OpenWatcom和Borland C++ 5.5,连wxWidgets都编译不过,郁闷!
今天是重阳节,据说要登高,这个习俗我是去年才知道的。突然想起去年的情景。
去年十一的时候嫌无聊,开始参加网上组织的户外活动组织,一个月要出去2-4次,而像重阳登高这种是纯娱乐休闲级别的,那次是下了班转了几次车最后还是打车去的集合地点的。
时间过得真快啊,就这么一年过去了!
这是这三天来忙碌的成果,其实实打实只有近一天的时间是花在这个上面了。前天差不多提交了50个,昨天休息了,今天则是差不多提交了90个左右。本来说是一个150的列表,其中有重复的,有需要back link的,有类型不合适的,还有其他一些原因的,最终没有提交成功的,所以估计最后的总数在140左右。
今天开始就新的内容了,嗯!
原本我提交的时候,都是老老实实一项一项地填写软件信息的,虽然也知道有PAD,还装过个自动生成软件,但一直没用上。今天突然觉得应该多提交些网站,于是从cnsw论坛里找了批下载站的地址,开始提交,猛然发现大多数站点是只接受PAD方式提交的,于是没办法咯,只好老老实实生成各个PAD,再提交。
不过这样下来,发现用PAD提交,既然没有软件自动提交,纯粹人肉也不是很费时间啊!
昨天跟一个以前的同事在QQ上聊天,说到他有朋友是卖电脑的,问有没有什么软件可以OEM的。想到要OEM,必然要大众,要傻瓜,要新潮。于是我随便想了想,倒也不是真想去OEM,只是最后想到AV类的软件,实在是极其巨大的市场!
于是我又发散思维地想了想,最后觉得这类型的产品是有利可图,而且网上代码和成品软件很多,开始涉足的技术难度应该不是非常大。
唉,为了快速圈地,只好先投身AV事业了!
知道IUP应该是去年的事,有个叫LuaForWindows的集合,里面就带了一个,上网了解了一下,知道还有一起的IM和CD。LuaForWindows已经提供了使用MSVC2005编译好的二进制文件,不过我不喜欢。我打算用MinGW编译一把。
开始的时候我以为可以直接用自带的makefile编译。结果是我花了半天时间,在msys里编译,还试图根据编译时报的出错信息,来修改makefile。在msys编译失败后,我尝试看那个自带的makefile,以为用TecMake可以编译通过,事实又是让我那么的失望!
最后,经过我对makefile的简单解读和分析,我决定自己写下个bjam的编译脚本。总的说来,我深信bjam是很适合用来编译库的,毕竟boost就是一堆的库。经过近一天的努力,除了那些需要依赖OpenGL、Windows Media SDK、DirectX等额外库支持的库,其他的基本都被我编译出来了。
本来bjam是可以支持一次编译多个工程(库),或只编译一个工程(库)的,不过那种bjam脚本我还不会写,我只能分别为IUP、CD和IM各写了一个bjam编译脚本。看来还是得再深入学习一下啊!
前些天才知道,tor也是会被封的,要用tor bridge才行,至于bridge的ip从哪来,网上到处有说,也就是给某邮箱发个邮件索取来的。
这两天发现,这些bridges也是时好时坏的,于是笨办法是不停地索取新的bridges来用,今天发现得到的ip有的是之前得到过的,也就是说可能是不好用的,只能试试之前没用过了。
唉,封得越来越死了,无语!
昨天一时好奇,从网上下载了CTeX 2.8 Beta1来,安装好后,尝试着编译原来的一个纯英文的文档和一个Beamer做的幻灯片,结果发现全都有问题。首先是编译速度非常非常慢,CPU占满。然后是原来用grphicx的地方,直接插入png的语句编译不过。最后是发现Beamer包的应用和bibtex联用的地方,最后一次pdflatex 编译时,编译不过。
速度慢倒暂时也忍了。至于插入png的语句编译不过,通过网上找到的资料,下载了个ImageMagick,里面有个convert.exe,可以将 png转换成eps,而实际上这eps也只有在普通文档中是可用的,在Beamer中仍然要用png,这是让人很郁闷的地方,几方处理方式不一致,是让写程序的人很头疼的事。
好吧,这些都是可以放一边的。最最关键的是,那个幻灯片编译不过呀!如果不编译最后一次,那参考文献就不行了。于是继续上网找办法,发现一会儿工夫有了CTeX 2.8 Beta2,嗯,实际上我是很有心理准备的,这么一个小Beta号的变更,是不会有大变动的,但仍然不死心地尝试了一下,果然不出所料还是不行的。于是在CTeX的网站上看到正式发布的2.7.1.42版本CTeX,仍然不行。期间还试过有个CTeXLive2008的集成包,呃,也是不行的!
我相当的郁闷!于是上CTeX的论坛上发帖求助,直到今天有个管理员给了个2.4的CTeX下载路径,才算最终搞定!对于这种不了解的东西,不能随便升级了,要升级前也得对能正常工作的旧版本做好备份工作,以便及时回滚啊!
昨天差不多搞了整整一天,幸亏现在网速快了,不然还得花更多的时间呢。被LaTeX折腾了,教训啊!
我到现在还是没有掌握到Windows图形界面的真正规则,只能使用各种现成的类库、组(控)件、框架来做界面。很多效果如果默认的控件不能提供,需要自绘什么的,我就傻眼了。
昨天又花了不少时间在做界面上。本来是想在一个Pane上放在一个自绘的ListBox的,结果问题不断,困难重重。其实到最后发现所有的问题都是只要使用适当的窗口风格就可以解决,我大汗!
今天偶然发现在svn trunk中的wxWidgets已经支持Ribbon了。在更新了代码后,我还特地用VC2008编译了一遍体验了一下。总的说来,可以算是 Ribbon了,但感觉没有像XTP、BCG或MFC v9.0中的那么舒服。我看的是它自带的那个sample,还带着Windows标准窗口的标题栏,没有左上角的按钮和下拉菜单,也没有右上角的按钮。不知道是sample中没实现,还是wxWidgets本身就不支持。不过我想么,用wxWidgets本身就说明是重点关注它的跨平台可移植性,就不要关注这种平台特定的东西了,包括那GDI+也是。它既然号称look and feel native,那么代价就是界面不容易做得很有个性,就只适合做些严肃题材的软件了,比如IDE。
今天又看了下MSDN中对VC 2008 Feature Pack中对MFC界面增强的介绍,让我有点儿小小的郁闷,之前是过分谨慎,或者说固步自封了,没早点尝试这个增强库,而一直盯着XTP不放。今天看来,绝大部分需要的特性,在这个Features Pack中是提供了的。只不过现在还没仔细看过它的各个sample的代码,不知道它到底可以实现怎样的效果。
昨天拉肚子,拉了一天,上了5次,拉得四肢乏力,全身脱水,口干舌燥,真是太惨了。好在晚上去二伯家拿了一些药,效果还是挺明显的,早上本来的时候,肚子没怎么乱叫了,经过一晚上的休息,总算也恢复了一点体力!
今天去市区买电脑桌,我需要的是是圆角的那种,上面还连着书柜的,去找了几个地方,很贵,嗯,至少是超出了我的预计,不过最后还是买了一个那里看起来最便宜的一款。
既然去了市里,就趁此机会去见一下老同学,自从高中毕业以后,至今已经八年多没见,missdeer这个id的由来的那个家伙。昨天在msn上跟她联系过,今天我先打电话到她家,是她妈妈接的电话,我却以为是她在逗我玩,娘俩的嗓音是比较接近,让我差点儿摆了乌龙,还没有多说话而说错话。
倒是想过不少再次见面时的场景,不过现实是让我有点儿意外,她居然叫我去她爷爷家,我比较汗!路上买了点儿水果,呃,确实没这种上人家家里的经验,也没人告诉过我,不过我想有长辈么,带点儿水果应该不算失礼,也不算唐突吧。
实际上,我比我自己想象的要不拘谨得多,这让我自我感觉良好,哈哈。不过毕竟分开得太久了,而且两人的经历差异也太大,让我觉得实在很难找到话题。
这丫头现在瘦得不成样子,164的个子才92斤,真是皮包骨了,还说现在上海就是流行这种骨感的。看那小腿,大概真只有我上臂的粗细了,还是喜欢她以前稍稍有点肉嘟嘟的可爱模样啊!
嗯,今天是国庆节,是的,我得祝贺,说实话我的心底还是热爱这个国家的,热爱这个国家中的人民的,当然这种热爱并不表示我会同样热爱这个国家的执政党。
上午还是看了国庆阅兵的一部分直播内容,呃,我不是个军事迷,对那些部队装备和武器是一窍不通,不过这不影响我对阅兵式的观赏心情。总的说来,作为一个仅仅60年历史的政府来说,能做到目前这样的程度,真的很不错了,人渣和败类是很难免的,这需要经过长时间的修正才能慢慢做得更好!
祝贺伟大祖国60华诞!