Win32 OpenGL系列专题
因为转来后格式混乱,所以在本博客不保留原文了,直接去CSDN看吧.
这个系列是当时边学OpenGL边写的,那个时候对OpenGL的理解非常肤浅,就是对着红宝书及一些网上的例子学习,现在回头来看,很多地方还是有不对的地方,绝对不推荐初学者不辨别对错的阅读,以免被我误导,可以作为学习之余添加的例子观看,因为我总是想着弄些好玩的东西,例子可以试试,也许可以增加你的兴趣。
因为转来后格式混乱,所以在本博客不保留原文了,直接去CSDN看吧.
这个系列是当时边学OpenGL边写的,那个时候对OpenGL的理解非常肤浅,就是对着红宝书及一些网上的例子学习,现在回头来看,很多地方还是有不对的地方,绝对不推荐初学者不辨别对错的阅读,以免被我误导,可以作为学习之余添加的例子观看,因为我总是想着弄些好玩的东西,例子可以试试,也许可以增加你的兴趣。
write by 九天雁翎(JTianLing) -- www.jtianling.com
IT行业最大的特点是喜新厌旧,伴随着这一特点衍生出来的就是商家喜欢炒作概念,这不,“云”一时间成为了最热门的词汇,于是一切都“云”了,Amazon最先有了通用云计算平台为这个推波助澜,Google这个本身就处于云端的公司也推出了App engine,一时间大家都“云”了,阿里也“云”了,Ubuntu9.10有了企业云,现在输入法都”云“了。何处不云阿。。。。。。。。。让人头晕。
作为概念输入法,搜狐并没有打算大规模推广和使用,仅仅作为创新的一个尝试平台,事实上,的确也还没有到那个成熟度,另外,在云计算没有完全普及之前,在真实的世界还不仅仅是浏览器时,仅仅只能在浏览器中使用输入法,还是有点让人接受不了,就算作为尝试创新的平台,起码也应该能够大体正常的使用才对。
当然,搜狐的概念“云”输入法的一些概念还是不错的,也不能算作是普通商家的概念炒作了,毕竟这是真的“云”,计算是放在服务器端的,是通过网络调用的,也用了流行的B/S结构,让浏览器作为平台,意图达到有浏览器就能使用的目的(虽然还没有达到),因为计算在服务器,所以也能进行一些大胆的尝试,进行一些巨量(在客户端不能想像)的计算,提供超大的词库(据说4G),使用三元模型来匹配词组,客户端显示的词组都有服务器计算匹配返回,这些新鲜的东西,作为一个网络游戏服务器端的开发人员,我听起来还是感觉很新鲜的,天哪,一个输入法的开发都用了什么技术了啊,事实上,因为使用了“云”的概念,客户端的输入法也变成了一个单纯的显示平台。。。。。详细情况可以参考搜狐的网页,我看齐展示的技术的确有吸引人的地方,输入法最重要的是什么?自然是匹配率罗,首次匹配成功的几率越高,越能节省我们的时间,作为提高我工作效率的软件,我一概欢迎,我连Vim,AutoHotkey这样需要学习代价的软件都欢迎,更别说是像搜狗输入法这样不用学习就能提高效率的产品了。上面的那些新技术的出现自然不是为了彰显技术,而是以提高匹配率为目的的,事实上,虽然知道是搜狗首先有了将搜索引擎的数据与输入法挂钩的思想,但是今天才知道搜狗输入法的技术含量其实还是挺高的,不像想像的那么简单,我只希望,“云”输入法这样的产品要事实上能够实用起来,改善Linux下输入法的效率,而不是像现在这样,不能在浏览器以外的地方使用就算了,甚至连Google Doc,Gmail都无法使用。-_-!具体匹配率有怎么样的提高,说的玄乎又玄没有用,匹配率再高我首先也要能用吧。。。。。目前我能用到的地方就只在Google的搜索框-_-!
呵呵,不得不承认,我很关注这样的“云”的产品,因为“云”产品在Linux下使用与在Windows下使用效果是一样的(我在Windows下也是用Firefox),加上数据存在服务器,我可以随时随地的获取到我要的东西,也不担心由于自己机器丢失,硬盘损坏,病毒,操作系统重装导致的数据丢失,Google Doc,Evernote就是其中最好用,最优秀的典型产品,“云”嘛,填平了操作系统间的鸿沟,浏览器就是操作系统,搜狐能有此先知先觉(不知道算不算),希望能够真的将产品做起来,而不是停留在概念输入法的阶段。毕竟,广大的Linux/Mac用户尚翘首以盼。。。。。。。。。
不过说回来,搜狐在输入法这点上还真是下了本了,但是这个本钱花的即使不真得有有效的商业模式,同样还是划算,用这些钱开发一个普通大众几乎人人使用的软件比用大成本去做广告强,一个天天使用的好用软件本身就能在用户心中潜移默化的留下好的印象,何况这年头,互联网企业的杀手锏就是用免费培养用户习惯,然后收费。。。。虽然有的是以增值服务的方式提供的(那么多网络游戏其实都算),这笔生意在事后看起来是这么的清楚和划算,但是竟然一开始都没有人发现,(虽然现在很多公司发现了)任由MS的默认输入法在江湖上混了那么久。。。。。唉。。。。。。。。坐地分析一个东西容易,坐地发现一个这样的机会却难之又难,不知道第一个提出“云”概念的人/公司有没有想到会有这么一天,整个IT世界都往“云”上搬,甚至是输入法,甚至是操作系统呢?
此文为本人博客第300篇文章,以为纪念。
write by 九天雁翎(JTianLing) -- www.jtianling.com
无论哪一个新版本的操作系统发布,都会是“空前的,划时代的”产品,别的不说,我感觉广告倒是每次都是“空前的,划时代的”。我不知道每次的操作系统升级到底有多少创新的东西,也不知道Ubuntu9.10与Ubuntu9.04与Ubuntu8.10之间到底差别有多大,也不清楚Windows 7到Windows Vista到Windows XP之间的跨度有多么大,我只在想,要是老是划时代,我们现在已经在哪个时代了?唉,也要理解理解,做个操作系统不容易啊。。。。。最近Windows 7出来了,我没有升级,等它普及,软件跟上再做吧,Ubuntu9.10恰好也出来了,我升级了,毕竟,点几下鼠标就升级了,因为很显然不会普及,所以,我也没有必要等它普及了-_-!
我用的其实是KDE,这里说的也应该是Kubuntu的才对。图形界面那就很简单多了,有自动弹出的提示,傻瓜式操作,我家还有台台式机只有命令行怎么办?网上也搜到了办法,安装update-manager-core包,
sudo apt-get install update-manager-core
然后运行之:
sudo do-release-upgrade -d
。
Ubuntu9.10与Ubuntu9.04的变化:
官方的介绍《Ubunt9.10新特性》
中文参考此文:
比较吸引我的有几点:
1:软件中心
新立得我感觉是真正属于划时代的产品了,只要不是想要最新的版本尝鲜,不然Ubuntu下的软件安装将比Windows下的还要简单,Windows下是 找地方下载-》下载-》安装,Ubuntu是选择-》应用。因为开源/免费的性质,使得Ubuntu能够有所突破,Windows下的迅雷,360想学,但是都学不来(别说还没有解决需要手动下一步安装的问题),这点我以前提过,也是我感觉Ubuntu最人性化的一点,在命令行下,我只能用apt,但是仅仅是使用apt,软件的安装也是无比的惬意,加上Ubuntu的公司建立的ppa(Personal Package Archives : Ubuntu),更加是让Ubuntu下的deb包源更加丰富,基本上想要的我还没有碰到过没有的。既然软件中心要替代原有的添加/删除软件工具,那么新立得和KPackageKit(远没有新立得好用)都要统一了吗?真好,那样会解决我不喜欢安装GTK+导致的新立得没有办法用的问题。(事实上,不用新立得的唯一好处就是我不会常常因为其软件太过丰富而导致头晕,花很多时间下载一大堆看上去很有意思但是实际我根本不会用到的软件),据说软件中心中还会添加进商业软件-_-!那更加是让人兴奋罗,赶快看看。作为KDE使用者接受的代价是装上一堆Gnome的东西-_-!我没有为新立得屈服,为软件中心屈服了……………
使用感觉是,软件界面重新设计了,软件的分类更加面向普通的用户(非程序员),现在是安装软件的应用来分类,见上面的截图就能看出来,基本与菜单启动分类一致,而以前是按照软件的实现来分类,比如Gnome,KDE,Python什么的。这样普通用户的使用应该是更加上手了,但是,我要是找一些东西还真不知道实在哪个分类里面的。。。。呵呵,我估计有的时候还是得用新立得才行。另外,因为两个软件都是以apt为基础的,所以不能同时运行。
另外,在other分类中,我也没有看到真正的商业软件,仅仅看到一些如flash pugin,ATI驱动等东西(也许就是上文所谓的商业软件),当然,他们不开源,但是免费,我还以为会提供oracle的Linux版本提供下载了-_-!(想远了)或者商业软件是指MP3解码器等东西?(的确不为真正的GNU开源卫士所接受)
基本上,软件中心没有让我特别惊喜的地方,可能对普通用户更加方便吧,对于我来说反而感觉包难查到,并且批量安装,删除没有原来那样方便了。
2.Ubuntu One
同步文件,2G空间,天哪,真不错,虽然我已经有网易的网络U盘了,但是使用上别提多麻烦了,那是引导顾客多上其网页操作的设计,也没有提供其他访问方式,而且空间总是不嫌少嘛,何况是内置在操作系统内部的工具,带同步功能。这个很吸引我,现在不要再和我讨论东西放在网上和放在自己电脑上哪个更好的问题了,可以的话,我希望将操作系统都放到网上去(好像以前有个类似的东西)。
很显然,要注册了,并且提供了两个版本,这也算是Canonical的创收之路之一吧^^我以前已经在launchpad.net注册过了,现在可以直接使用其账户,而且不仅仅有文件共享的功能,还有note,联系人等功能,最郁闷的是。。。。。继TortoiseHG以后,这个功能又是与Nautilus绑定的,我再次吐血和感叹我这样使用KDE被抛弃的孩子-_-!但是,使用Ubuntu One后,会在主文件夹下增加一个名为Ubuntu One的目录,此时只需要将文件复制进去,就会自动进行同步:),呵呵,还算是比较好用,这样的话,我将来就将此文件夹作为工作目录了,无论在哪,都不怕文件丢失,呵呵,就像有个备份硬盘一样,2G的空间也能使用够久了,还可以方便的在我的服务器上同步,(还需要研究命令行下的使用方法)
最遗憾的功能是Quickly,本来多好的一个功能啊,(听起来)结果是针对gtk的-_-!我是无福消受了。被抛弃的孩子。。唉。。。。还有rhythmbox……我们不是不能用,要用的话代价是在KDE中再装个Gnome-_-!(虽然为了软件中心我已经装了。。。。)呵呵,但是Qt的很多工具已经够用了,我也不想太多了。
新浪也有新闻《Ubuntu 9.10正式发布》,竟然还提供了下载,才发现,原来新浪已经提供一些流行Linux发行版的下载了,呵呵,加上以前网易提供了一些Linux发行版的源(我没有用过,仅仅听说),现在Linux发展还不错嘛。
本来想写点完整的东西,最后光是找软件下载体验去了。。。。。。。遗憾,遗憾
原创文章作者保留版权 转载请注明原作者 并给出链接
这一次Ubuntu的更新可能是因为我正好在家呆着没有工作的原因,感觉等得特别久,平时忙起来更新反而没有怎么注意,呵呵。高兴更新中。
因为免费,开源,才能出现这样询问是否升级整个系统的对话框,什么时候,XP,Vista用户能看到MS提供的是否升级整个系统到Windows7的对话框呢?也就是因为免费,开源才能出现像apt-get和新立得这样将软件安装全部一键化的产品,Windows下的迅雷,360等想学但是要完全学会那就不仅仅是技术上的可行性问题了,呵呵,服务器开发人员的一点感慨,纯Windows开发人员请无视。
第一次见到CMake应该是在Eclipse中的编译工具链选项,但是一直没有太过在意,然后再次认识CMake与许多人一样,是通过KDE的源代码,当我上次查看KDE中右键菜单编辑时,接触了KDE的源代码时,很自然的需要KDE的构建系统,CMake,但是光是用用,也没有在意,直到我看到《通向KDE4之路》系列文章《通向KDE4之路(八):CMake,新的KDE构建系统》时,(KDE使用者推荐阅读,写的实在是太精彩了!Linux伊甸园的转载版本是比较好的,但是不全,其他很多版本都不带图,少了很多阅读乐趣,KDECN的版本文章较全,就是没有图)对KDE4从autotools工具链转向CMake有了深刻印象,有了一探究竟的想法,毕竟,当年我学习autotools系列工具的时候,压根就没有用心,在公司也没有类似工具的使用氛围,一般都是通过一个简单的模板手工编写makefile,然后整个工程的先后顺序依赖等事情通过bash脚本来管理-_-!呵呵,虽然说实话,因为毕竟公司的工程的改动并不大,而且当时以移植Windows的服务器程序为主,所以还算够用。。。。。另外,要是不是现在没有工作比较清闲,还真没有闲工夫去学习这些东西。
write by 九天雁翎(JTianLing) -- www.jtianling.com
Don’t Repeat yourself在编程领域成为DRY原则,是知道我们编写强壮代码的重要指导原则之一,但是,事实上在其他领域也是一样的(我也不知道此原则是否最先出现在编程领域)。Larry Wall的懒惰是程序员的美德的话我是记忆深刻。作为一个对计算机着迷,对程序无比投入的人,深知学海无涯,但是,正是因为学无止尽,更迫切的需要我们做追求效率的程序员,将重复的工作交给最擅长做重复工作的电脑去做,只有这样,我们才能将更多的时间节省下来,去干我们自己想干的事情。(虽然工作时不太可能-_-!但是起码能赢得一句手快的评价,再次-_-!)学习VIM,Bash,Python,Lua,Qt,SQL都是如此,在这条路上已经走了这么远的我们,又何惧为了更加提高效率,再多学AutoHotkey这样一个小工具呢?既然选择了远方,就只顾风雨兼程,既然选择了编程,就只能忘了远方。-_-!敲自己的键盘,让别人走路去吧。
AutoHotkey的名字大家说不上如雷贯耳,久仰大名,起码也是早有耳闻了吧。让我们不惧艰险(又是一种脚本语言-_-!)将AutoHotkey作为饭后甜点好好品尝一下吧吧^^
AutoHotkey简单来说是一个附带键盘宏录制的脚本工具,但是因为功能太过强大了,叫做自动化工具也许较为合适。从自动化工作这一点来看,AutoHotkey类似Linux下的Bash,都不以脚本语言的逻辑表达能力取胜,专门针对自动化工作设计,只不过Bash是命令行下的,对窗口一无所知,而AutoHotkey可以说是专门针对Windows的窗口平台的,有对快捷键和窗口环境的强大支持。(我见人将其称作GUI-Scripting,实在贴切)也许可以说AutoHotkey就是GUI环境下的Bash。既然Linux下Bash是必学的(的确应该学),那么AutoHotkey也就顺便学了吧。
下载安装我就不多说了,真的不知道这里有个地址可以去看看。善用佳软的AutoHotkey 0级教程,顺便推荐下善用佳软,推崇并介绍了很多好用的免费软件,个人很喜欢。
AutoHotkey的脚本是以ahk为后缀的文本文件,用你自己最喜欢的编辑器编辑吧,对于vim来说,已经内置了对ahk的语法高亮,我习惯将AutoHotkey的安装目录添加进环境的PATH中,这样用vim编辑脚本的时候可以直接简单的通过!Autohotkey %来运行脚本。(事实上我将其map到了F5上)但是愿意的话,其实.ahk文件在AutoHotkey安装后是与其关联的,直接双击也可以运行此脚本。
首先编个最简单的脚本,看看效果先。
将上一行的代码保存成文本,双击运行,或者用autohotkey运行之,会自动开启你机器上的默认浏览器登录我的博客,建议大家每天运行100次以上^^这个功能有点像Python的os模块的startfile函数,通过解析后面的字符串来判断应该使用什么与其关联的程序运行。当年工作的时候我有个开机脚本就是用Python此函数做的,功能就是开启工作需要的一大堆程序,VS,MSDN,TotalCommand自动一个一个开启并打开合适的工程或目录。现在这个功能也可以交由autohotkey来完成了。就是一条Run命名。
相对来说,对于特定用途的工具(比如Bash,autohotkey)来完成其擅长的事情是会比通用工具(比如Python)来的简洁的,此即一例,Python中虽然也能完成这样的工作(在没有学习Bash前,在linux下它都是我的脚本工具),但是,需要进行import模块,函数调用等一堆难看的东西,autohotkey只需要一个Run。这里之所以讲的多点,是想说明一个特定工具哪怕并不是完成了什么不可能完成的任务,也许仅仅是将任务完成的更加简洁高效和优雅,也是一个工具的用途体现。至于值不值得为了这份优雅付出学习的代价,那就见仁见智了。
再看个例子:
Run c:/DirTest.txt
此脚本会自动的用你机器配置的文本编辑器开启此文件。(文件必须存在)
但是以下脚本
Run notepad.exe c:/DirTest.txt
无论文件存在不存在都会开始记事本,其中的区别,大家自己体会一下。事实上解析的强度比一般人能够想象的还要厉害,帮助文件中有这个示例:
Run mailto:someone@somedomain.com
呵呵,什么意思大家都知道,牛吧。可惜我一般不用客户端写邮件-_-!
AutoHotkey自然对Hotkey又特别支持啦,脚本中用符号表示快捷键,一次排列,几个常见的修饰键对应符号是#Win, !Alt,^Control,+Shift。那么什么叫依次排列呢?看下面的例子。
#space::Run http://www.jtianling.com
以上的例子即将Win + space 键设定为访问我的博客,运行后发现没有直接的反应,不像上述例子,此时AutoHotkey以trayicon小图标的形式运行于右下角,当你输入Win + space的时候会触发其运行默认的浏览器开启网站,并且一直有效,直到你将其关闭。(此例也推荐大家每日运行100遍^^与前面第一个例子结合交叉运行效果更佳)同理,要ctrl+space就是^space,要ctrl+alt+space就是^!space。
事实上,一个快捷键可以对应多个命令,也可以多个快捷键对应一个命令,格式有点不多,见下例。
#space::
Run http://www.jtianling.com
Run http://hi.csdn.net/vagrxie
return
#^a::
#^b::
Run http://www.jtianling.com
return
此例即是在按下Win + space时打开我的CSDN博客和空间两个网页,并且CTRL + WIN + A与CTRL + WIN + B都是打开我的博客。举这两个例子主要是告诉大家AutoHotkey的格式相对比较灵活,比如这里的一对多和多对一。当不是一对一并且写在一行时,需要以return来表示脚本的结束。
这也许是最先应该说的,MsgBox
MsgBox Text
即可以通过MessageBox弹出Text的信息,比较方便
可以通过MsgBox弹出Yes Or No等选项,并获取,以判断分支执行程序。
MsgBox, 4,?,Yes or No?
ifMsgBox Yes
MsgBox You Said Yes!
else
MsgBox You Said No?
分支执行的语法比较奇怪,通过if结合MsgBox构成一个IfMsgBox特别应对MsgBox的选择。
个人感觉,对窗口的控制是AutoHotkey的精髓所在,这也是为什么我将其比作GUI下的bash。这里我还是通过从简单到复杂的例子来描述。比如,我现在在编辑文档的时候常常会需要打开AutoHotkey的帮助文档查看,一般我的操作是用鼠标点击其最小化的窗口以激活,或者我也会需要开启gvim以编辑示例程序,也是需要用鼠标去激活,因为用atl+Tab的方式还不如用鼠标快,有了AutoHotkey,我们就有更方便的Hotkey去完成这样的任务了。
SetTitleMatchMode 2
#tab::
ifWinNotExist, GVIM
{
MsgBox GVIM is not running
return
}
IfWinNotActive,GVIM
WinActivate,GVIM
else
WinActivate,Windows Live Writer
return
如上脚本,先判断是否有标题包含GVIM的窗口存在,不存在则报告GVIM没有运行,不然WIN+TAB键的效果就是在GVim与Windows Live Writer之间切换,非常方便。ifWinNotExist如其名,用于判断一个窗口是否存在,ifWinNotActive也如其名用于判断一个窗口是否激活,第一个参数都是表示窗口标题文字的匹配,匹配模式由SetTitleMatchMode决定。
1: A window's title must start with the specified WinTitle to be a match.
2: A window's title can contain WinTitle anywhere inside it to be a match.
3: A window's title must exactly match WinTitle to be a match.
我们使用的是2,表示任意位置都匹配,默认是1,速度最快,必须是开始位置匹配。if一组的函数都还支持其他参数,具体的请查看帮助文档了,我这里主要是展示一下用途。
实际上AutoHotkey对窗口的控制还有很多强大的功能,一篇小文无法一一尽数,这里再举个例子:
SetTitleMatchMode 2
Loop, 10
{
Random, x, 0, 50
Random, y, 0, 50
WinMove,GVIM,, %x%, %y%
WinHide,GVIM
Sleep, 100
WinShow,GVIM
}
上述程序运行后,GVIM窗口会变的疯狂。。。WinMove,WinHide,WinShow的意思都很明显,分别是移动,隐藏,显示窗口,这里有两个有新意的地方,一个是Random和x,y,有点编程知识的人都看出来了,AutoHotkey是允许设定变量的,此处的x,y就是,引用变量的方式是前后各1个百分号,与windows批处理程序的一样。另外就是Loop,10表示的循环结构了。
这个功能有点像国内一个也比较强大的软件键盘精灵的功能(当年玩那种泡菜网络游戏没有少用过它,单纯的键盘鼠标模拟功能不比AutoHotkey差),就是将键盘鼠标操作记录下来,自动生成AutoHotkey的脚本。省去了重复工作的脚本编写之苦。带GUI界面,截图如下:
点击左上角的Record按钮就开始记录键盘鼠标的操作了。然后通过点击录制时屏幕左上角的Stop停止录制。上面的脚本是我录制的一段激活Windows live Writer和最小化Windows live Writer的过程。
WinWait, ,
IfWinNotActive, , , WinActivate, ,
WinWaitActive, ,
MouseClick, left, 1159, 889
Sleep, 100
WinWait, xfsdlaf.ahk (E:/work) - GVIM,
IfWinNotActive, xfsdlaf.ahk (E:/work) - GVIM, , WinActivate, xfsdlaf.ahk (E:/work) - GVIM,
WinWaitActive, xfsdlaf.ahk (E:/work) - GVIM,
MouseClick, left, 908, 17
Sleep, 100
WinWait, ,
IfWinNotActive, , , WinActivate, ,
WinWaitActive, ,
MouseClick, left, 33216, 32891
Sleep, 100
WinWait, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
IfWinNotActive, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer, , WinActivate, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
WinWaitActive, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
MouseClick, left, 1362, 10
Sleep, 100
MouseClick, left, 1387, 10
Sleep, 100
会发现自动生成的代码较人工的代码还是乱了很多-_-!机器嘛,不是那么聪明。上面代码很重要的一个就是通过MouseClick来模拟鼠标的点击,有了这个功能,想干什么都可以了………………顺便提及一下,也可以通过
Send Keys
SendRaw Keys
SendInput Keys
SendPlay Keys
SendEvent Keys
来模拟键盘的输入。下面是一个当你暂时离开机器却有不想锁屏时可以提出警告的脚本。:)
SetTitleMatchMode 2
SetKeyDelay 50
Words = WARNING{!} DO NOT OPERATE MY COMPUTER{!}
KeyWait, LButton, D
run,gvim YouAreUnderMonitored,,Max
WinWait,YouAreUnderMonitored
Send i%Words%{Esc}
此脚本等待鼠标左键单击,然后自动开启gvim并最大化,然后一个字一个字输入警告信息^^不明就里的人一看估计碰鬼了。
对于AutoHotkey这样强大的东西,一篇3000来字的小文实在是无法详细尽数其功能,而本人的目的也就是提供给觉得AutoHotKey复杂而不去学习的人尝个鲜,知道了AutoHotkey没有那么难以后,伴随着使用,参考着帮助文档,慢慢的会发现AutoHotkey也是一个离不开的工具了。我就在网上看到很多人狂喊,Linux下什么都好,就是没有AutoHotkey-_-!(其实类似的言论非常多,比如也没有Windows Live Writer equivalent)
原创文章作者保留版权 转载请注明原作者 并给出链接
write by 九天雁翎(JTianLing) -- www.jtianling.com
write by 九天雁翎(JTianLing) -- www.jtianling.com
本文不准备详细的讲解每一步,那是侮辱准备开始进行Qt学习的人的智商,仅仅将容易碰到的问题和关键步骤。
没有话说,首先下载安装带CDT的Eclipse,Qt的Windows安装包。Qt的安装包中是附带了MinGW的,虽然版本相对会老一点,所以不求新的完全可以不自己安装MinGW。(MinGW的安装,推荐下载自动安装包安装)
然后就是Qt的Eclipse integration,也有安装包,配置正确,安装完成后,安装部分完成的差不多了。
配置过程,首先Eclipse中将C/C++->New CDT project wizard中的toolchains改成MinGW GCC,并设为默认,然后将MinGW目录中(假如没有单独安装Qt的目录下有)的mingw32-make.exe改为make.exe,这一步很关键,切记,当年我缺少make.exe很郁闷直接下了个GNU版本的make程序,自以为应该错不了,结果GNU的make在解析Windows版本程序的时候会出现问题,我很久都没有发现是GNU make程序的问题(主要问题在于程序路径的解析),剩下的就简单了,建立工程时选other,会看到Qt的工程向导,建好,编译,运行。
VS2008安装就不多说了,Qt VS add in的安装也不多说了,都是普通的安装包,很简单,但是配置,让人吐血,这一步没有看文档能够完成的,那是天才。当时都安装完以后,新建工程会出现Qt的向导,但是使用后,会发现创建不了,提示你配置Qt,然后会发现VS2008中已经出现Qt的菜单项,选择Qt Option后,可以看到需要配置Qt SDK的路径,选择后,你无论确认多少次你选择是正确的,但是OK按钮永远还是不可用,一直灰显的,你会纳闷了,程序出问题了?明明选择正确了啊?这就是Nokia出的高级软件-_-!
事实上,是配置不对,目录对了,但是目录里面的东西不对,你选择是是MinGW版本的Qt SDK-_-!事实上,Nokia就没有配置好的VS Qt版本提供下载,需要搭配VS使用时,需要自行配置。在Qt SDK安装目录下,将整个以时间命名的目录拷贝一份(保留MinGW版本以配合Eclipse),在此目录的下一层目录的Qt/bin中会发现configure.exe程序,我们需要运行此程序对Qt进行配置。我推荐配置命令是
D:/Qt/vs2008ver/qt>configure -opensource -debug-and-release -platform win32-msvc2008 -no-sql-sqlite -no-qt3support -no-dbus -no-phonon -no-phonon-backend -no-webkit -no-libtiff -no-dsp
剩下来进行傻瓜式选择,开始等待Qt的配置。配置完成后,用nmake编译,留下至少7G的空间用于存放中间文件,然后等N个小时吧(鬼知道Qt到底多么庞大)祈祷你成功吧,然后再次进入VS的Qt Option选项,选择目录,总算看到OK按钮活过来了,不容易啊,在Windows中要求进行Linux般的配置,会难住更多的人,因为在Linux下我进行再复杂的配置都习以为常,但是在Windows下我只习惯下一步。。。。。。。。。。。。
这一段讲这么多,是希望大家亲自来感受一下被折磨的感觉-_-!还有以防进行到一半需要帮助的难兄难弟,其实,正因为这个步骤实在是繁琐加费时,所以,现在有个专门的开源项目来解决此事,那就是qt-msvc-installer,经我试用,感觉比上述过程实在是一个天一个地,我庆幸我用的是VS2008,因为上述项目只支持VS2008,同用VS2008的人庆贺吧,说开源不好的人(比如Qt在这点上做的)的确有道理,但是没有开源(比如说qt-msvc-installer),那我们就还是在做着那些重复的,无意义的,让人郁闷及崩溃的事情。
一般而言,在Windows下安装软件,配置软件比Linux下容易的多,随着yum,apt等工具的发展,事情慢慢开始发展变化了,最近发现Qt的变成环境可以作为极端的例子来看,在Linux下配置一个Qt的编程环境那是相当简单的事情,因为其他的一切都已经有了,g++,make,有了,qt4可以通过apt-get安装,已经存在一个qt的C++的编译环境了,我们需要做的就是下载Eclipse并安装(事实上kubuntu9.04中也可以apt-get安装的,但是版本太老),再搭配一个qt的eclipse插件,就一切OK了,全过程不要1个小时,但是要在Windows下搭建一个类似的环境谈何容易啊,没有勇气,信心,毅力的同志根本不可能在不参考教程的情况下解决。。。。参考教程也需要毅力。。。。(最近Linux软件的配置安装都很少看类似的东西了,Windows下更加是很久很久没有听说过安装软件要看教程的了)
其实,VS版本的Qt难以配置使用应该来说有一部分是Nokia的因素,他们是故意设计难用的,因为他们有好用的Windows下的商业版本用来卖钱,其实这是奇怪的继承了奇趣的传统,奇趣需要这种手段赚钱,但是Nokia根本不会需要这点零头,Nokia需要是的极大的推广Qt,以获取开发人员对其移动平台的支持(支持塞班的Qt就要发布了)。。。。现在Gnome与GTK+声势已经盖过KDE+Qt了,但是Nokia却仍然不肯放弃那古老的传统,这是我不能理解的。
原创文章作者保留版权 转载请注明原作者 并给出链接
write by 九天雁翎(JTianLing) -- www.jtianling.com
Qt还是本人可移植GUI程序开发的首选,不过Qt开发普通的应用程序是行,但是据说效率太低,以至于像某些人说的那种刷新看得到一条条横线?这点我比较纳闷,就我使用的感觉,虽然Qt不以效率著称,但是事实上有足够的优化,最最典型的就是默认的图形双缓冲,按照Windows下的编程惯例是需要手动开启,并通过额外的接口调用才能使用的,这一点在以前简单图形编程学习时比较过Qt,Win32 GDI时感受特别深刻,在没有额外处理的时候,Win32动画程序那个闪阿,而Qt程序非常稳定。事实上,我想,Qt的其他问题比效率严重多了,比如个人感觉Qt程序在Windows下刷新的感知明显没有Windows原生程序快,这点倒是值得改进。
学习OpenGL很久了,也是时候在Qt的框架下感受一下OpenGL了,这也是学习OpenGL的好处,学习D3D的话就没有这么Happy了,事实上这也导致我老实东学西学-_-!真不知是好是坏。。。只是作为程序员的感觉,要是世界只剩下Windows,那么实在失去了太多的色彩。
以下的代码全部在Kubuntu9.04环境下运行,在Eclipse IDE + CDT 6.0 + gcc 4.3.3 + qt4Eclipse插件 下编译运行。
我现在是在用笔记本工作,并且笔记本没有支持3D加速的显卡。。。但是,还好,Linux可以使用Mesa,在显卡不支持的时候可以自动启用软件模拟,支持的时候自动启用硬件加速。
Qt可以说是对OpenGL有直接支持的,提供了QGLWidget类来绘制OpenGL,并且一如Qt既往的面向对象封装方式。下面是一个最简单的程序,一如《Win32 OpenGL编程(3) 基本图元(点,直线,多边形)的绘制》中的Hello World例子。
#ifndef OPENGL_H
#define OPENGL_H
#include
#include
#include "ui_opengl.h"
class OpenGL : public QGLWidget
{
Q_OBJECT
public:
OpenGL(QGLWidget *parent = 0);
~OpenGL();
void initializeGL();
void resizeGL(int width, int height);
void paintGL();
private:
void draw();
private:
Ui::OpenGLClass ui;
};
#endif // OPENGL_H
#include "opengl.h"
OpenGL::OpenGL(QGLWidget *parent)
: QGLWidget(parent)
{
ui.setupUi(this);
}
OpenGL::~OpenGL()
{
}
void OpenGL::initializeGL()
{
}
void OpenGL::resizeGL(int, int)
{
}
void OpenGL::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
draw();
}
void OpenGL::draw()
{
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f (-0.5, -0.5, 0.0);
glVertex3f ( 0.5, -0.5, 0.0);
glVertex3f ( 0.5, 0.5, 0.0);
glVertex3f (-0.5, 0.5, 0.0);
glEnd();
}
这样就完成了一个利用OpenGL绘制矩形的任务,paintGL中调用的完全是普通的OpenGL函数,一如我们学过的普通OpenGL函数,没有区别。其中最主要的代码就在OpenGL::paintGL()中,这一点需要额外注意,那就是此处与普通的Qt程序是不同的,普通的Qt程序将重绘的工作放在paintEvent中进行,但是,可以想像的是,其实paintGL不过是QGLWidget中paintEvent中调用的一个虚接口,Qt可以在外面做好足够的OpenGL准备工作。initializeGL,resizeGL,paintGL 3个额外的虚接口就构成了一个简单但是强大的OpenGL框架,一如GLUT抽象出的框架及我在Win32 OpenGL学习时建立的框架一样,知道这些以后,可以将OpenGL在Qt中的编程分成两个部分,一个部分就是由initializeGL,resizeGL,paintGL三个虚接口构成的OpenGL的领域,我们可以在其中进行我们习惯的OpenGL操作,而程序的输入等其他GUI相关的处理则还是交由Qt原来的框架去完成。
OpenGL从Win32到Qt
为了说明Qt中对于OpenGL处理的抽象,我将原来在《Win32 OpenGL编程(5) 顶点数组》一文中实现的一个较复杂的例子移植到Qt中。
其实基本上做做copy和paste的操作就OK了。
void OpenGL::initializeGL()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
// 启用顶点数组
glEnableClientState(GL_VERTEX_ARRAY);
// 颜色数组也需要启用
glEnableClientState(GL_COLOR_ARRAY);
// 默认就是此参数,可忽略,为了明确说明特意指定
glShadeModel(GL_SHADE_MODEL);
// 顶点数组数据
static GLfloat fVertices[] = { -0.5, -0.5,
0.5, -0.5,
0.5, 0.5,
-0.5, 0.5,
0.0, 0.0}; // 添加的原点
// 颜色数组
static GLfloat fColor[] = { 1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0,
0.0, 0.0, 0.0,
1.0, 1.0, 1.0}; // 原点颜色为白色
// 指定顶点数组数据
glVertexPointer(2, GL_FLOAT, 0, fVertices);
// 制定颜色数组
glColorPointer(3, GL_FLOAT, 0, fColor);
}
void OpenGL::resizeGL(int, int)
{
}
void OpenGL::paintGL()
{
draw();
}
void OpenGL::draw()
{
glClear(GL_COLOR_BUFFER_BIT); // 清空颜色缓冲区
static GLubyte byTopIndices[] = { 2, 3, 4};
static GLubyte byLeftIndices[] = { 3, 0, 4};
static GLubyte byBottomIndices[] = { 0, 1, 4};
static GLubyte byRightIndices[] = { 1, 2, 4};
// 上述函数调用与下面的效果一样
glPushMatrix();
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, byTopIndices);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, byLeftIndices);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, byBottomIndices);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, byRightIndices);
glPopMatrix();
}
效果如下图:
这也可以看做是抽象的强大之处,经过同样的抽象,OpenGL代码放在Qt中与放在Win32中,放在GLUT中其实都没有什么两样。但是,最重要的是,上面这段代码可以在Windows下面编译运行,而反过来却不行-_-!
完整的源代码放在博客源代码的2009-10-20/OpenGL中,但是这个源代码可不是VS2008的了,是Eclipse的工程管理的,当然不用Eclipse直接使用makefile编译也行。全文用在Kubuntu中用Google Docs编辑发布,希望格式不会乱。
由于篇幅限制,本文一般仅贴出代码的主要关心的部分,代码带工程(或者makefile)完整版(如果有的话)都能用Mercurial在Google Code中下载。文章以博文发表的日期分目录存放,请直接使用Mercurial克隆下库:
https://blog-sample-code.jtianling.googlecode.com/hg/
Mercurial使用方法见《分布式的,新一代版本控制系统Mercurial的介绍及简要入门》
要是仅仅想浏览全部代码也可以直接到google code上去看,在下面的地址:
http://code.google.com/p/jtianling/source/browse?repo=blog-sample-code
原创文章作者保留版权 转载请注明原作者 并给出链接
write by 九天雁翎(JTianLing) -- www.jtianling.com
write by 九天雁翎(JTianLing) -- www.jtianling.com
一直比较被CSDN的博客系统所折磨,很多东西一直不太好用,在线编辑功能有多么不好用就不多数了,当年手一滑还可能在页面跳转时丢失全文,现在这点有所改善,在切换页面时有提醒,但是贴图片的操作还是如此的复杂,默认宽度还是无法调节,在我的1440*900的显示器上就像在800*600上编辑一样,让人崩溃。离线编辑明显还是更安全,更方便,也能在本地保存一份,所以使用上了Word2007,Word2007附带有博客发表功能,编辑功能足够的强大,贴图片更加方便了,但是可惜通过Word2007发表后的博文总是会格式不对,最气人的就是格式离谱到标题2比标题1要大,C++语言的#include <xxx>永远被解析,然后变成#include空气,也没有办法预览效果,直接编辑发布后的HTML。导致我非常郁闷,只能先通过,后来与CSDN负责人的工作人员联系了一下,他推荐我使用Windows Live Writer(以下简称WLW),我就试用了一下,感觉编辑功能太过简陋,首先复制粘贴会丢失格式,那么就没有办法直接粘贴代码附带颜色和格式了,并且不能自定义格式模板,即将段落,标题的格式改成自定义的,还不能通过模板新建文章,因为以上缺点,直接放弃了WLW。后来在网上看到有人说WLW是世界上最好的博客编写发布软件,甚至在Linux下他也是通过Wine去运行WLW写博客,我才准备回过头来确认一下,WLW真的有这么好吗?网上搜索了一下这几个缺陷,既然WLW支持插件系统,希望有插件可以解决问题吧,我将http://gallery.live.com/上感觉可能有用的插件全部下载回来,逐一尝试,顺便公布一下结果,免得大家做重复工作。以下是我下载回来的插件:
作为程序员的技术博客,插入代码没有高亮的问题首先是肯定要解决的,以下以一段OpenGL相关的C++程序片段为例,其中包含了#include,宏定义,函数定义,中文注释等,展示全部效果给大家看,
相关插件很多:
界面,配置选项非常多,感觉不错。还可选择silent模式,以后直接从剪贴板中按照原来的配置添上代码,简洁明快,很好,就是目前没有发现怎么关闭silent模式-_-!
最后在Documents and Settings/<用户名>/Application Data/Leo Vildosola/Code Snippet plugin for Windows Live Writer下找到了其配置文件CodeSnippet.dll.config,编辑RunSilent为false如下后修复。
<RunSilent>false</RunSilent>
实际代码出现效果,可配置,可用容器显示滚动条效果以限制源代码所占篇幅(可惜高度不可以通过GUI方便的调节),格式正常,颜色漂亮,支持中文。感觉不错。有个缺点就是不是用容器的时候无法一次选择然后配置。
1:
2: // OpenGL需要的头文件
3: #include <GL/glew.h>
4: #include <GL/glut.h>
5:
6: //定义程序链接时所需要调用的OpenGL程序库,简化工程配置
7: #pragma comment( lib, "glu32.lib" )
8: #pragma comment( lib, "glut32.lib" )
9:
10: // DEFINES ////////////////////////////////////////////////
11:
12: // MACROS /////////////////////////////////////////////////
13:
14: #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
15: #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
16:
17: // GLOBALS ////////////////////////////////////////////////
18: HWND ghWnd; // 窗口句柄
19: HINSTANCE ghInstance; // 程序实例句柄
20:
21: #define FRAME_PER_SECOND (30)
22: #define TIME_IN_FRAME (1000/FRAME_PER_SECOND)
23: #define CIRCLE_POINTS (100)
24: #define PI (3.1415926535898)
25:
26: // 取消 OpenGL ,在程序结束前调用,释放渲染环境,设备环境以及最终窗口句柄。
27: void DisableOpenGL()
28: {
29: wglMakeCurrent( NULL, NULL );
30: wglDeleteContext( ghRC );
31: ReleaseDC( ghWnd, ghDC );
32: }
33:
1: // OpenGL需要的头文件
2: #include <GL/glew.h>
3: #include <GL/glut.h>
4:
5: //定义程序链接时所需要调用的OpenGL程序库,简化工程配置
6: #pragma comment( lib, "glu32.lib" )
7: #pragma comment( lib, "glut32.lib" )
8:
9: // DEFINES ////////////////////////////////////////////////
10:
11: // MACROS /////////////////////////////////////////////////
12:
13: #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
14: #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
15:
16: // GLOBALS ////////////////////////////////////////////////
17: HWND ghWnd; // 窗口句柄
18: HINSTANCE ghInstance; // 程序实例句柄
19:
20: #define FRAME_PER_SECOND (30)
21: #define TIME_IN_FRAME (1000/FRAME_PER_SECOND)
22: #define CIRCLE_POINTS (100)
23: #define PI (3.1415926535898)
24:
25: // 取消 OpenGL ,在程序结束前调用,释放渲染环境,设备环境以及最终窗口句柄。
26: void DisableOpenGL()
27: {
28: wglMakeCurrent( NULL, NULL );
29: wglDeleteContext( ghRC );
30: ReleaseDC( ghWnd, ghDC );
31: }
界面如下,选项还算比较丰富,但是明显没有CodeSnippet好
代码效果还行,并且可以一次选中然后进一步配置,就是对中文支持有些问题,可惜了。还有标题栏可以选择显示,就是不能编辑,奇怪的设置。
界面,很大,感觉不错,虽然配置选项其实不多,也可选择box格式,不过效果一般。
全文格式效果一般,颜色明显没有Code Snippet丰富,而且代码行间距实在太大,还无法配置.
1:
2: // OpenGL需要的头文件
3: #include <GL/glew.h>
4: #include <GL/glut.h>
5:
6: //定义程序链接时所需要调用的OpenGL程序库,简化工程配置
7: #pragma comment( lib, "glu32.lib" )
8: #pragma comment( lib, "glut32.lib" )
9:
10: // DEFINES ////////////////////////////////////////////////
11:
12: // MACROS /////////////////////////////////////////////////
13:
14: #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
15: #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
16:
17: // GLOBALS ////////////////////////////////////////////////
18: HWND ghWnd; // 窗口句柄
19: HINSTANCE ghInstance; // 程序实例句柄
20:
21: #define FRAME_PER_SECOND (30)
22: #define TIME_IN_FRAME (1000/FRAME_PER_SECOND)
23: #define CIRCLE_POINTS (100)
24: #define PI (3.1415926535898)
25:
26: // 取消 OpenGL ,在程序结束前调用,释放渲染环境,设备环境以及最终窗口句柄。
27: void DisableOpenGL()
28: {
29: wglMakeCurrent( NULL, NULL );
30: wglDeleteContext( ghRC );
31: ReleaseDC( ghWnd, ghDC );
32: }
33:
34:
似乎要和Windows的博客空间相匹配,而且配置界面感觉很简陋,在我的机器上以insert就崩溃
界面简陋
颜色还不错,但是不支持中文,一票否决.
// OpenGLÐèÒªµÄÍ·Îļþ #include <GL/glew.h> #include <GL/glut.h> //¶¨Òå³ÌÐòÁ´½ÓʱËùÐèÒªµ÷ÓõÄOpenGL³ÌÐò¿â,¼ò»¯¹¤³ÌÅäÖà #pragma comment( lib, "glu32.lib" ) #pragma comment( lib, "glut32.lib" ) // DEFINES //////////////////////////////////////////////// // MACROS ///////////////////////////////////////////////// #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // GLOBALS //////////////////////////////////////////////// HWND ghWnd; // ´°¿Ú¾ä±ú HINSTANCE ghInstance; // ³ÌÐòʵÀý¾ä±ú #define FRAME_PER_SECOND (30) #define TIME_IN_FRAME (1000/FRAME_PER_SECOND) #define CIRCLE_POINTS (100) #define PI (3.1415926535898) // È¡Ïû OpenGL £¬ÔÚ³ÌÐò½áÊøÇ°µ÷Óã¬ÊÍ·ÅäÖȾ»·¾³£¬É豸»·¾³ÒÔ¼°×îÖÕ´°¿Ú¾ä±ú¡£ void DisableOpenGL() { wglMakeCurrent( NULL, NULL ); wglDeleteContext( ghRC ); ReleaseDC( ghWnd, ghDC ); }
还有一个syntax highter,需求真是大啊,软件如此多。可
名不符实,根本没有高亮,仅仅只有缩进。但是可以一次选中然后配置,这点比较好。支持中文。
// OpenGL需要的头文件 #include <GL/glew.h> #include <GL/glut.h> //定义程序链接时所需要调用的OpenGL程序库,简化工程配置 #pragma comment( lib, "glu32.lib" ) #pragma comment( lib, "glut32.lib" ) // DEFINES //////////////////////////////////////////////// // MACROS ///////////////////////////////////////////////// #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // GLOBALS //////////////////////////////////////////////// HWND ghWnd; // 窗口句柄 HINSTANCE ghInstance; // 程序实例句柄 #define FRAME_PER_SECOND (30) #define TIME_IN_FRAME (1000/FRAME_PER_SECOND) #define CIRCLE_POINTS (100) #define PI (3.1415926535898) // 取消 OpenGL ,在程序结束前调用,释放渲染环境,设备环境以及最终窗口句柄。 void DisableOpenGL() { wglMakeCurrent( NULL, NULL ); wglDeleteContext( ghRC ); ReleaseDC( ghWnd, ghDC ); }
完美复制visual studio的代码,从其他地方拷贝过来的无效,无界面配置。用途单一。
// OpenGL需要的头文件 #include <GL/glew.h> #include <GL/glut.h> //定义程序链接时所需要调用的OpenGL程序库,简化工程配置 #pragma comment( lib, "glu32.lib" ) #pragma comment( lib, "glut32.lib" ) // DEFINES //////////////////////////////////////////////// // MACROS ///////////////////////////////////////////////// #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0) #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1) // GLOBALS //////////////////////////////////////////////// HWND ghWnd; // 窗口句柄 HINSTANCE ghInstance; // 程序实例句柄 #define FRAME_PER_SECOND (30) #define TIME_IN_FRAME (1000/FRAME_PER_SECOND) #define CIRCLE_POINTS (100) #define PI (3.1415926535898) // 取消 OpenGL ,在程序结束前调用,释放渲染环境,设备环境以及最终窗口句柄。 void DisableOpenGL() { wglMakeCurrent( NULL, NULL ); wglDeleteContext( ghRC ); ReleaseDC( ghWnd, ghDC ); }
没有感觉完美的插件,相对来说不支持中文的我们不考虑了,不支持C++的我不考虑了,最后结论是仅仅使用VS的人可以考虑Paste from Visual Studio,够用就行,不然CodeSnippet是最佳选择,比那么多的syntax highlighter都要好用,Source Code Formater可以作为第二选择,相对来说显示效果没有CodeSnippet好,配置选项没有那么丰富。
其他插件:
感觉不错,作用也很好,说是能很方便的查找添加MSDN的关键字链接,可是我连查wglMakeCurrent,wglDeleteContext,ReleaseDC都不存在,然后查了个简单的abs都查不到,有可能是网络问题,但是现在我网络状况很好,可惜了。
将控制台中复制的东西插入,因为我常用putty登录linux,然后展示命令行的东西,所以对我个人也很实用,也许一般人没有什么用吧。Windows的命令行甚至可以显示命令高亮-_-!功能强大,好用,虽然没有任何配置的办法。
Windows:
C:/>dir/w 驱动器 C 中的卷没有标签。 卷的序列号是 6854-7E94 C:/ 的目录 AnalysisLog.sr0 AUTOEXEC.BAT CONFIG.SYS [Documents and Settings] [Download] [Downloads] [ppt] [Program Files] [TDDOWNLOAD] [Temp] [WINDOWS] 3 个文件 419,464 字节 8 个目录 1,806,254,080 可用字节 C:/> |
Linux:
jtianling@jtianling-laptop:~$ ls -l | head -n 5 总用量 20772 -rwxrw-r-- 1 jtianling jtianling 1570 2008-10-26 16:59 1 -rwxrw-r-- 1 jtianling jtianling 11 2009-08-21 17:25 1.bat -rwxrw-r-- 1 jtianling jtianling 80 2008-11-12 23:45 allhead -rw-r--r-- 1 jtianling jtianling 0 2009-08-29 12:37 a.out jtianling@jtianling-laptop:~$ |
Rich Editor
有点像代码高亮的插件,但是仅支持C#和VB.net,还不支持中文,图都不想贴。
能将抓的图直接粘贴到WLW中,甚至不保存,节省大量时间,强烈推荐使用,首先要安装SnagIt。有一点问题就是配置太少无法抓WLW本身的图,医者不自医?-_-!
直接插入关键字在Wiki的链接,相对来说,由于Wiki的目录设置,其直接通过字符串生成了Wiki的链接,甚至没有查看一下链接是否存在,这点比较郁闷,但是总的来说还是值得一用。比如右边,C++,就是用此插件插入的,当肯定链接存在时不妨一用。
Word Count
原以为WLW中没有统计字数的功能,后来我发现本来就有,那还要这个干啥?还要求先选中全文-_-!无语了。
有点类似VA的Snippets功能,保存文本的模板,可惜的是不能将全部格式保留下来,所以将范围限制在了最最简单的文字,有点可惜。
以上就是我使用过的插件,感觉Windows Live Writer本身可能不是太好用,但是没有关系,有了这些插件后,就好用多了,对于我来说,特别重要的是语法高亮的插件,这也算是开放的一个好处吧,希望微软多多开放,就像VS及WLW走的路一样。
本文因为操作Windows live Writer失误,被新的文章覆盖,通过Google cache奇迹般地找回,感谢Google-_-!
原创文章作者保留版权 转载请注明原作者 并给出链接
write by 九天雁翎(JTianLing) -- www.jtianling.com