俗话说:磨刀不误砍柴工。得心应手的工具,对于长时间的软件开发,能够起到事半功倍的效果。VS 本身已经是一个非常强大的开发平台,只是在这个巨无霸的开发平台上,某些小功能还是不尽如人意。这个时候就需要插件来帮忙了。但是由于 VS 本身的原因,VS 的插件并不像 Eclipse 那样丰富,我用到的有:

1). Visual Assist X:简单的说就是编辑器增强。安装后会增加 VAssistX 的菜单,里面主要有一些代码的 snippet(比 yasnippet 差远了),一些查找引用等贴心的功能。VA Outline 的功能比 VS 自身的要好很多。其余的主要是代码补全方面的增强。比如你写一个类,重命名其中一个成员的时候,会出现以下的窗口:

这是一个很方便的功能。免除了手工修改反复编译的错误和潜在的危险。另一方面,这也说明事先的设计是非常重要的。当你敲了几万行代码后却发现其中一个英语单词拼写错误的时候,再想去修改时一件非常尴尬的事情。不改吧,显得自己没水平;改吧,很麻烦。在我们的代码中,我就发现了类似的错误,关于汉字拼音输入法的命名, "Chinese" 写成了 "chiese" ,结果一直就这么用下来了……还有,我们新开发的控件,由于要仿照 iPhone 的效果,所以新的一套控件啊类啥的统一加上前缀 'I' 。可是毕竟大家习惯不同,有的是大写的srccpp{‘I’} ,有的是小写的 'i' ;还有最开始的控件都是只能支持 bmp 图片的载入,过了一段时间,底层引擎改进,支持 png 图片的载入了。可是类的成员函数很多却没有跟上。 SetBitmap 里面有很多载入的却是 png 图片,也一直这么用下来了。

2). ViEmu:简单的说就是给 VS 的编辑器加上 Vim 的 key bindings。官网的 ViEmu 还支持 Word 和 Outlook,不过我用的不多。令我非常惊喜的是这个小插件竟然还支持 Vim 键盘宏 的功能。

iLogoLabel      * m_pJnyTrnLabel;   // logol label

ILabel          * m_pJnyTrnStaticTrain;
ILabel          * m_pJnyTrnStaticSeat;
ILabel          * m_pJnyTrnStaticStartStation;
ILabel          * m_pJnyTrnStaticStartTime;
ILabel          * m_pJnyTrnStaticDestStation;
ILabel          * m_pJnyTrnStaticDestTime;
ILabel          * m_pJnyTrnStaticBookInfo;
ILabel          * m_pJnyTrnStaticNote;

// 动态框架可变信息
ILabel          * m_pJnyTrnTitle;   // title of this window
ILabel          * m_pJnyTrnTrain;
ILabel          * m_pJnyTrnSeat;
ILabel          * m_pJnyTrnStartStation;
ILabel          * m_pJnyTrnStartTime;
ILabel          * m_pJnyTrnDestStation;
ILabel          * m_pJnyTrnDestTime;
ITextArea       * m_pJnyTrnBookInfo;
ILabel          * m_pJnyTrnNote;

//buttons
iIdxButton      * m_pJnyTrnDelete;          // 删除按钮
iIdxButton      * m_pJnyTrnServicePhone;    // 客服电话按钮
iIdxButton      * m_pJnyTrnShare;           // 共享按钮
iIdxButton      * m_pJnyTrnStartMap;        // 出发站地图按钮
iIdxButton      * m_pJnyTrnDestMap;     // 终点站地图按钮

以上代码是一个窗口的 .h 文件里面的一部分,是这个窗口类的成员函数。一般来说,在构造函数里面将这么多成员初始化为 NULL。没有键盘宏,我们只能动用自己的四肢,一会 end,一会又点点鼠标,折腾 3–5 分钟,终于把这些成员都“初始化为 NULL" 了。有了键盘宏,这种工作只是十几秒钟的事情。进入命令模式:

  • qa 开始记录宏
  • q 结束宏的录制
  • @a 执行宏。可以加数字参数,比如 10@a 表示执行键盘宏 10 次。

其余的具体细节,看 Vim manual 吧。

3). .vssettings 文件:多数用 VS 的人可能不知道,长时间对着白底黑字对眼睛是非常有害的。找一个深色调的主题,一来延长显示屏寿命,二来有效保护眼睛。在这方面 Vim 和 Emacs 是榜样,他们都有非常多的 color-theme。Vim 本身是内置 color-theme 的, Emacs 的 color-theme 需要插件支持,我偏好于黑底白字的 color-theme——bash 终端就是这个颜色,比较 cool,呵呵。在 Word 2003 里面也有设定默认背景色和字体颜色的选项,较好的方案是蓝底白字,对眼睛比较好;但是到了 Word 2007 里面这个功能却不见了,不知道 MS 是怎么想的呢。好在 WPS 有这个功能,所以我现在用 WPS。废话说了这么多,在 VS 里面,也是可以设置字体和颜色的。工具 –> 选 –> 环境 –> 字体和颜色:

但是一项一项的设置不仅非常麻烦,而且由于 80% 的程序员都没有与其编码能力相称的美工配色能力,所以这个方案基本是不可行的。剩下的,就是前人栽树,后人乘凉。 Google: filetype:vssettings ,找到自己喜欢的配色文件,直接导入即可。

4). git-extentions:我对版本控制并不是特别了解,主要是自己经验不足,没有多少实际的开发经历。只是在去年的 Java 课上,自己像模像样的用了一下 Git。对版本控制的印象也只停留在了“好像是个时光机”这个层次上。目前主流的版本控制应该是 CVS、SVN和 Git 吧。CVS 廉颇老矣,逐渐被 SVN 取代,Git 是 Linus 几个星期内写的,却很快风靡了开源世界,还曾引发了一场 C 和 C++ 的论战。SVN 的各种插件比较成熟,项目组最开始的引擎也是用 SVN 做版本控制,用的插件是 TortoiseSVN。VS 相关的集成插件是 AnkhSVN,我也安装了。但是老实说,我不太喜欢。最不喜欢的是 SVN 在项目目录的每个目录下都创建一个 .svn 目录,让我十分不爽。而且还有自己架设 SVN 服务器,Apache 啥的,我看着就头大了。哪如 Git,一条 git init 语句就可以投入使用了。

就这么多,Visual Assist X 和 ViEmu 是共享软件,需要发挥中国人的聪明才智破解一下。后面的免费的。

刀已经磨好了,怎样砍柴又是一个问题。因此对嵌入式尤其是 WinCE 和 Windows Mobile 平台上相关知识的了解是至关重要的。网上有一些非常不错的博客和资源如下:

  • 克伟的博客 – 里面的一篇《如何开发绚丽、高效率的界面 (Windows 嵌入式系统 )》,讲的非常透彻,深入浅出,非常适合向我一样的新手入门。
  • LinuxGraphics – 难得的介绍各种 GUI 体系结构原理的网站。是我见过的所有讲 GUI 体系的网站中最好的一个。
  • cexer – 这个博客的作者对 GUI 框架体系有相当的研究,里面有一些 GUI 实现机制的源码,值得学习。
  • The linux mobile development – 这个博客有个 ftk 项目,想学习开发嵌入式 GUI 的同志们可以研读一下代码。别的开源代码如 GTK、Qt、MiniGUI等都太庞大了。这个项目刚开始起步,整体来讲研读起来比较容易一些。

当然,“纸上得来终觉浅,绝知此事要躬行”,自己动手实践才是最重要的。