与原版本相比,新版控件在很多方面都进行了改进:
最大的变化在于核心算法上有了很大不同,这主要表现在资源使用、载入速度和换肤方案上。
为了减少闪烁,旧版控件通常设置控件的AutoDraw属性为True,而新版控件使用了子类技术在控件窗口的WM_PAINT消息中绘制控件外观,这大大提高了控件的载入速度并减少了资源占用。
与传统的贴图方案相同,旧版控件需要为每一个控件设置相同的图片来确定其外观。例如,一个窗口中有10个按钮,若要修改其外观可能会需要使用下面的代码:
Set acCommand1.Skin = picNewSkin
Set acCommand2.Skin = picNewSkin
...
这样做的缺点是改变外观时要修改所有控件的属性,不仅繁锁,而且浪费资源,因为每个控件的 Skin 属性中保存着一个相同的图片对象。而新版控件可以使应用程序中的所有按钮共享同一个图片对象,用户只需改变其中一个按钮的外观,那么其他按钮也就随之改变,同时也减少了内存的使用,这方面的好处对于较大的应用程序尤为明显。
其次,属性设计更加灵活而简洁。
例如:旧版本的按钮中有一个布尔型的 FocusRectEffect 属性,可设置是否显示焦点矩形。而新版中取而代之的是一个长整型的 FocusRectSize 属性, 调整它的值,不仅可以实现不同大小的焦点框,以适应不同风格的按钮,同样可以实现无焦点框的功能。一个属性实现两个功能,不仅减少了不必要的资源占用,更简便了用户操作。
除此之外,一些原本在VB中运行时只读的属性现在已可读写了,如列表框和组合框的Sorted、Style属性等。
类似的属性还有很多,大家可以阅读帮助文件了解更多,同时我们相信您在实际应用中可以有更加深刻的体会。
此外,属性页的设计也使用户在设计时设置属性值加更方便,以减少代码的录入量。例如:多行文本框的Text属性、列表框和组合框的List、ItemData等属性的值,都可以在设计时输入。
除上述改变外,对旧版本功能上的完善也是新版的工作之一,如:所有皮肤图像都不再限制尺寸、进度条实现了垂直显示及显示不同格式的进度文本、列表框的多选及复选等等。
另需说明的是,大家都知道子类在VB中是危险的, 尤其在VB的IDE中问题更是突出,我们见过太多的产品都有这样或那样的问题。虽然新版控件大量地使用了子类技术,但作者使用了特有的技术可以防止控件出现各种问题,例如:您可以在任何地方使用End语句退出程序(尽管微软不提倡这样做,但决不会因为使用了子类而导至程序的非法退出);可以在IDE环境中随时按下“停止”按钮中止程序的运行和调试;当程序中发生错误时也不会产生通常的“一般性保护错误”而导致程序或VB的IDE非法关闭;可以在程序中的任何地方设置断点以进行调试;在IDE中运行程序也不会导致对其他程序或IDE环境中的窗口造成不良影响 ......
总之,您不必担心控件因使用子类带来的任何负面影响。
我的主页 http://www.vb99.com