Powerbuilder提供了较为丰富的控件,特别是7.0版新增了ProgressBar、TrackBar等控件,但仍有不少Windows公共控件没有利用起来,如IP Address、StatusBar等,值得注意的是带微帮助的多文档窗口(MDI with MicroHelp)的状态条的实现与Windows公共控件没有任何关系,故Powerbuilder状态条所提供的功能相当有限。文本将就如何使用IP地址控件展开讨论,比起其它控件:它用到的消息较少,对Comctl32.dll有版本要求,所以适合在此讨论。
PowerScript是基于对象的语言,继承是面向对象方法的重要原则,如何利用现有代码进行高效的复用是我们在实现时应考虑的。因此,笔者强烈建议将调用Windows公共控件的代码封装在外部控件用户对象中,方便以后在布局视图中将它作为用户对象控件布置在窗口或可视用户对象上。
接着将具体讨论创建外部控件用户对象的步骤。
一、创建控件
在新建向导的对象标签页上选择外部控件图标(New->Object->External Control)即可创建一个外部控件用户对象,然后读者请注意属性(Property)视图的常规(General)标签页,在该标签页上有很多影响调用效果的属性,现一一介绍如下:
- Text属性:字符串型,窗口的标题。绝大多数的Windows公共控件都是窗口,都要调用CreateWindowExA函数来创建,Text属性其实就是CreateWindowExA的参数lpWindowName。现列出CreateWindowExA函数的Powersoft原型:
Function ULong CreateWindowExA(
ULong dwExStyle, /* 扩展的窗口风格*/
String lpClassName, /* 已注册的类名*/
String lpWindowName, /* 窗口名*/
ULong dwStyle, /* 窗口风格*/
Int x, /* 窗口的水平位置*/
Int y, /* 窗口的垂直位置*/
Int nWidth, /* 窗口的宽度*/
Int nHeight, /* 窗口的高度*/
ULong hWndParent, /* 父窗口的句柄*/
ULong hMenu, /* 菜单的句柄*/
ULong hInstance, /* 应用实例的句柄*/
ULong lpParam /* 窗口创建的用户参数*/
)Library "User32.DLL"
- Tag属性:字符串型,这个读者都熟悉,不多说了。
- LibraryName属性:字符串型,动态链接库的路径。对于Windows公共控件通常位于%System%\Comctl32.dll,如:
C:\Windows\System\Comctl32.dll和C:\Winnt\System32\Comctl32.dll
填入该属性值后,Powerbuilder会判断该值是否是Comctl32.dll的路径,如果是的话将调用InitCommonControls(),否则不做任何动作。这个动作的原意是使用户不用调用InitCommonControls()来初始化,但造成了对4.71版及以后版本Comctl32.dll的支持问题,这会在后面探讨。






