使用Virtools的朋友都知道,Building Blocks是很重要的.在VT中提供了几百个BB供我们来使用.使用Virtools的SDK,我们可以开发出自己需要的Buliding Blocks,利用它很容易对我们的Virtools供能进行扩展.
在这里我写一篇教程,来介绍一下用Virtools SDK和VC++6.0来写Building Blocks的过程和方法.
这里要用到一些Win32和API编程的方法,不会的赶快恶补一下了,否则看不懂可别怪我.
在这个实例中,我们要开发一个这样的Building Blocks.它可以完成以下三个功能:
1: 可以把当前系统的时间以不同格式在Virtools中显示;
2: 它可以是你的Building Blocks对应的主窗口永远处于最上层;
3: 通过关闭进程的方法,它可以关闭你想要关闭程序和进程.
要先完成准备工作,在SDK中提供给我们了一个开发Building Blocks的向导文件Virtools Behaviors AppWizard.awx,位于\SDK\Utils\目录下.你把它拷贝到你的\Microsoft Visual Studio\Common\MSDev98\Template目录下.
完成以后启动的VC++,执行File-->New...,在Project中可以看到Virtools BB新建这一项,选中它.
在Project Name中填入你的名称,比如"My Building Blocks",同时要设置好你的项目保存路径.如图,单击OK进入下一步.
勾选"Behavior"和"Manager"这两个选项.
说明: 开发Buliding Blocks,"Behavior"选项一定要选择的,否则不能继续了.
由于我们在这个实例中要用到Enum类型变量,也就是枚举类型的变量.在Behavior中要用到你自己声明的新类型变量,必须要在CKERROR InitInstance(CKContext* context)接口中先注册,才能使用.所以我们要用到ParameterManager,必须勾选"Manager"这一项。按下Next,继续。
在这个窗口中填入你的Buliding Blocks的名字,要注意,这个名字不要和你的先前Project名字相同,否则编译时会报错。实现的类名称,我们不错修改,Next,继续。
在这个窗口中,我们在Behavior栏目中输入你的BB的类别名称“MyBBs”描述中填入你的描述“Show time Set Windows Always Top Exit Your proceeding” 为了简化我们Code,在Behavior Flags中我们不作勾选,需要的时侯我们自己加上代码来实现。这个实例中我们不用到Behavior的回调函数,所以CallBacks也不选择。Next,继续
填入你的Manager的名字,其他的选项不作勾选。Next,继续。
在这个窗口设置你的SDK目录和VT程序目录,插件名称等。单击Finish,完成。
执行Build--->Rebuild all。即可生成你的Buliding Blocks,它已经自动编译到你的Virtools\BuildingBlocks目录中。你启动你的Virtools,在Buliding Blocks列表中可以看到MyBBs这一项,里边已经有了我们编写的Time_Top_Exit BB了,如下图所示。
在你的项目文件中可以看到一些接口函数。
我们先声明一个枚举变量,然后注册它。用它来做我们的Time Type下拉列表(4个选项)。打开你的MyBB.h文件,在顶部加入以下Code:
typedef enum SHOWTIMETYPENUM
{
OSTIME =0x00000000, //24小时显示时间
OSDATE =0x00000001, //显示当前日期
UNIX_TIME_AND_DATE= 0x00000002,//完整显示日期,时间
HOUR_TIME_12= 0x00000003,//以12小时方式显示
}Enumeration;
这里有四个枚举值。
然后用define宏来设置这个变量:
#define GUID_SHOWTIMETYPENUM MyBBGUID
在CKERROR InitInstance(CKContext* context)接口中加入注册新类型变量的Code:
CKParameterManager* pm = context->GetParameterManager();
pm->RegisterNewEnum(GUID_SHOWTIMETYPENUM,"SHOWTIMETYPENUM","OSTIME =0x00000000,OSDATE =0x00000001,UNIX_TIME_AND_DATE= 0x00000002,HOUR_TIME_12= 0x00000003");
//注册新的变量类型。接口原型请参见SDK。
pm->ChangeEnumDeclaration(GUID_SHOWTIMETYPENUM,"OSTIME,OSDATE,UNIX_TIME_AND_DATE,HOUR_TIME_12");