|
vcextend 扩展了vc6.0的功能,包括函数体批生成、数据接口自动生成,注释可隐可现,注释自动生成文档等功能,可以大大提高vc的工作效率。 vcextend使用vc60的扩展宏接口,采用vbscript编写,使用起来跟vc本身的命令几乎没有区别。vcextend完全公开源代码,可以无偿使用和修改。 可以到http://www.mmmnn.com下载vcextend. 下边介绍几个主要的命令: 建立新类:生成干净清爽的类框架,代码模板可自由修改。 代码整理:为函数声明生成函数体,为成员变量生成读写接口(包括声明和实现),将函数体按声明的顺序重排序。这些操作一次性完成,无论你是新设计一个类还是修改一个类,这个命令都会工作得很好。 注释:生成注释模板,注释可隐藏,函数体可调出头文件写的函数注释进行阅读和修改。注释自动生成类似于msdn的文档。文档数据采用xml文件存储,你可以按照自己的喜好定义显示格式。 注释批处理:显示/隐藏全部详细注释,显示/隐藏注释摘要,自动为数据接口函数生成注释,文档整理理。 |
|
当然,你要先下载vcextend.rar。另外,也需要安装微软的xml插件。 vcextend.dsm是vcextend的源代码,把它拷贝到c:\\program filesmicrosoft\\ visual studio \\ common\\ msdev98\\ macros目录下,并把里边提供的命令挂接到工具栏上,就可以使用了。 如果你从没用过vc60的扩展宏,可以照下边的说明来操作。 启动vc60,不要打开任何工程。 在toos菜单选择macro,点击options >>, 点击load files,选中vcextend前面的复选框,取消其他选中的框。 点击toolbars标签,新建一个工具条,命名为vcextend。 点击commands标签,在category下拉列表中选中macros,commands框里就会显示vcextend的全部命令。 选中classnew,拖到vcextend工具条上,在弹出的对话框中选中text only,你就会看到classnew命令已经挂到工具条上了。把其他命令也挂到工具条上。 为了便于说明,我们先全部使用text only,以后,等你熟悉vcextend后,可以把文字按钮改为你喜欢的图标。 在show menus for下拉列表中选择all editors,点击close关闭对话框。 关闭vc60, 再重新打开。好啦,下面可以尝尝滋味如何了! |
|
这是appwidzard生成的sdi工程,全部使用缺省选项,只不过加了两个类罢了。 让我们先来看一看。 打开cshow类的头文件,是不是觉得代码特别的清爽干净? 再用浏览器打开doc目录下的doc.htm文件。 如果你没有安装微软xml插件,赶紧装一个。我用的是msxml3_cn。没有这个可能无法看到文档的效果。 你可以看到cshow的文档了,虽然这是随便贴的一些文字,没有实际意义,但如果是真正的工程,这个文档就可以在编码、调试、维护的过程中发挥很大的作用,这些东西完全是由注释自动生成的。ctaste类的文档还是空的,等一下由你来完成。 现在,我们再来试一试。请打开ctaste类的头文件,这是一个什么功能也没有的类。 先试一下codecleanup功能。 随便写两个函数的声明,不要使用vc的add member function功能,而是直接在头文件上写。如: cstring createnewobj(cstring name, int age); 在private:下面加个几成员变量,也是直接在头文件上写。每个变量要独占一行,并且,在要需要提供读写接口的变量后面加上可读写标记,可读的为//r,可写的为//w,可读写的为//rw,只能加在注释的最前面,如: private: 写完了吧?现在,点一下codecleanup按钮。 把光标放到你的函数的声明上,点击codejump按钮,怎么样?到了函数体了吧?再点一下codejump,又回到声明这边来了。 再看看头文件的下方,注明r的函数生成了get函数,注明w的生成了set函数,把光标移到这些函数的上面,点击codejump,怎么样?函数体和实现都有了! 再用codejump跳回头文件。我们只是走马观花一下,后面会有更详细的说明,现在先看看另一个主要功能:注释! 把光标在一个函数的声明上,点击comment按钮,函数上方会出来一个注释模板。先不管这些注释项是否符合你的要求,如果需要,你可以修改的,以后再说。 在各注释项上填一些内容,最好不要填垃圾文字,不想写的话,从别的地方拷一些也行,比如说就从这篇说明书上拷一些文字。 再点击comment按钮,出问题啦,注释不见了!不会丢了吗?再点comment,还好,又回来了。 用codejump跳到函数体。当你在写函数实现时想看一下注释怎么办?点一下comment,真棒,头文件写的注释,源文件也可以查看,当然,修改也是可以的。 这是函数注释,类注释有没有?当然有了,还是这个comment,只不过要先把光标放到类声明或类声明上方。 在类注释各项上填些文字,特别是简述和说明两项,多填一些,当然,内容可以是随便拷来的。 无论是函数注释还是类注释,写完或修改后都要再点一下comment,并且,光标要放在注释或函数上,当注释隐藏了,才是保存了。 现在我们来看看你写的文档。没写过文档?刚才填的注释就是了。 用浏览器打开工程目录下的doc目录下的doc.htm,接下来,就随便逛吧,反正,文档很象msdn,格式是我们大家都很熟悉的。 毛主席教导我们,要知道梨子的滋味,就得亲口尝一尝。味道怎么样?如果你喜欢,就继续往下看,如果不喜欢,如果不喜欢,那么......不会是真的吧? |
|
这是使用vc提供的宏功能和几个组件,用vbscript写的东东,语言的功能比较有限,并且,我对vbscript也不太熟,有些地方可能写得比较烂。 最糟的是出错处理,比如我想打开一个文件,使用documents.open函数,这个函数没有返回值,如果文件不存在,它不会告诉我不存在,而是造成一个致命的内存错误,可能导致vc要整个退出。哪位知道有没有解决办法啊? 当然,你不要害怕,这也没什么大不了的。如果你新建了一个工程,要使用vcextend功能,千万记住要把doc和txt两个文件夹拷到工程的目录下,和debug和res目录并列,如果你忘了的话,我以我的人格担保:一定会出问题的。 如果修改了vcextend的源代码,最好把vc退出后再重新打开,要不然也可能产生与上边所说相似的内存错误。 出了上述的问题后,如果在win2000环境下,最好注销再登录。 还有一个问题是,由于语言所限,考虑到效率和性能,无法对代码进行复杂的词法分析,所以代码要比较规范,当然也不太特别,都是非常普通的编码规范,只要做到了下面几点就行: 一是每个类一定要有构造函数,并且放在最上面,构造函数上方的代码将不作处理,你可以把内置的数据类型,如enum,struct或嵌套类什么的,放在构造函数的上边。 二是每个成员变量的声明要独占一行,是指头文件的成员变量,函数体内的东西,vcextend是完全不管的。 三是如果要写额外的注释,不能使用/**/,要使用//。 存在的主要问题,大概就这些了吧。如果你发现了什么问题,请在论坛发表,我将尽力解决。 另外要说明的是,inline函数的实现放在.inl文件中,所以一个类有三个文件。这是自动处理的,可不敢给你添麻烦。codejump的良好跳转功能,会让你感觉不到多了个文件。 虽然还有一些问题,但我觉得vcextend还是挺好用的,能提高工作效率十分之n。我向你推荐它,就表示这个东东不错,因为,我觉得不好的东西,是从来不会给人的,比如说,我从来不会随便送钱给人家,因为,我知道,金钱是肮脏的东西。 |
|
先用一下试试,点击classnew,在输入框中输一个类名:cmyclass,确定,感觉怎么样? classnew很简单易用,但还是有一些需要说明的。 首先是一些可选项,请根据你的需要来填写,如继承自某一个类的,就加:basename,不指定则会认为以cobject为基类;要指定文件名,就加#filename,不能有后缀,因为.cpp和.h和.inl都会共用这个文件名,不指定则会以类名去掉前缀c作为文件名,我主张不指定为好;至于目录名,现在不理它吧,很少用,以后会提到的;最后就是宏选项了,如果是可序列化的类,就加/s,消息类就加/m,加了这些选项就会生成相应的宏。除了类名在最前面外,所有的选项都不需要考虑输入的顺序。 你还可以修改代码模板,txt目录下的cpp.txt,hpp.txt,inl.txt就是生成新类框架的模板,可以按自已的喜好来修改。 classnew有一个显著的缺陷,就是生成的类不会自动加入工程,也不会加入到classwizard中,要使用project->add to project->files功能手工把它加入工程,如果要加入到classwizard中,可以删掉工程的.clw文件,再重新编译。一个更简单的办法是,先用vc的new class功能生成一个类,再用classnew重新生成一遍,这样就不会有这些缺陷了。 不是使用classnew生成的类,也完全可以使用vcextend的功能,只不过首次使用的时候会要求你输入类名和基类名而已,唯一的问题是代码跳转,偶尔可能会找不到,不过很少见。 如果你用vc的appwizard新建了一个工程,想把vc生成的代码改为用classnew来生成,也很简单的。先把工程另存一份,并启动另一个vc打开另存的工程。用classnew重新生成各个类,并从另存的工程中把所缺少的代码拷过来。最好是先拷头文件的代码,拷完后点一下codecleanup生成函数体,再拷函数体的内容。每做完一个类后编译并运行工程看有没有问题,没问题再做下一个类。app类千万不要忘了拷cmyapp theapp这一行。 |