1 / 57
文档名称:

pb学习讲座.doc

格式:doc   大小:298KB   页数:57页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

pb学习讲座.doc

上传人:xxq93485240 2019/6/19 文件大小:298 KB

下载得到文件列表

pb学习讲座.doc

相关文档

文档介绍

文档介绍:我们在以前的专题中讨论过如何使用WindowsAPI标准,调用外部函数的问题。而使用过WindowsSDK编程的开发人员都知道,、,Windows本身提供了大量的库函数,这些函数在PowerBuilder中,我们都是可以直接调用的。这样我们的函数库就一下子又扩充了500多个。      在这些API函数中,相当一部分对我们是非常有用的,这里我们可以分类向大家介绍一些:      窗口函数      自动卷滚条      缺省情况下,MDI表单是可以重新设定大小的。这样就可以使用户将窗口设成比您原先的设定更小。这种情况下,除非您对窗口设置了卷滚条的属性,窗口上的一些控件用户将不能访问到。而另一方面,除非窗口确实小到不足以显示所有的控件,否则没有必要提供卷滚条。      许多Windows的MDI应用在处理这一问题时是这样做的;当窗口小到天法显示所有控制时打开卷滚条;而窗口大小合适时,关闭卷滚条。PowerBuilder系统本身并没有提供自动处理上述操作的特性,但是我们自己加上这一特性是很容易的,而且实现上述自动卷滚条的功能也用不到WindowsAPI调用,只需在MDI表单窗口的resize事件中触发另一个事件以判断在当前窗口尺寸小于某一阈值时显示卷滚条(后面您将了解为什么我们要另外的触发一个事件,而不直接在resize事件中直接做)。此后用户在滚动卷滚条时,窗口是会自动随之滚动的,当用户再次改变窗口大小并大于该阈值时,我们应该关闭卷滚条,我们仍然可以不调用WindowsAPI而做到这一点。然而在整个例子中,真正有难度的是在关闭卷滚条之前,我们需要检查用户是否滚动了卷滚条。如果用户滚动了卷滚条,我们则应当首先将窗口移回原始状态这就要用到WindowsAPI函数了。因为我们需要确定:(1)卷滚条的滚动范围(2)滚动块在卷滚条上的当前位置。为了做到这一点,我们需要使用两个WindowsAPI调用:GetScrollpos和Getscrollrange。      为了使用这两个API函数,首先我们在需要使用它们的窗口中将它们声明为localexternal函数。在Localextemal函数对话框中,加入如下语句: FunctionintGetScrollPos(uintHandle,intBar)Library""SubRoutineGetScrollRange(uintHandle,intBar,RefintMinPos,&RefintMaxPos)Library""同时在该窗口中声明如下的实例变量://判断用户是否要最小化窗口Booleanib_minimized=FALSE//判断是否显示卷滚框intii_desired_height=1000intii_desired_width=2000      其中的两个整形变量ii_desired_height和ii_desired_width是用来决定在窗口的什么时候打开或移去卷滚条的阈值。当然,每个窗口中都必须设置这两个变量。为了使窗口更为通用,我们也可以定义一个窗口级的函数,该函数在窗口的open事件中能分析窗口的control[]属性也就是窗口内所有控件的最大值,以决定应将那两个整形变量设置为多少。      那个布尔型的实例变量ib_minimized是用来确定用户是否正要将窗口最小化。如果是,则我们处理卷滚条时会有些不同,稍后我们将讨论这种情况。      我们在open事件中,加入如下的语句: ===*.=*.009      接下来我们要做的是监视resize事件,根据用户改变窗口大小的不同方式,改变卷滚条的状态。这里的问题是,在移去或加上卷滚条时会引起另一个resize事件。因此,在resize事件中直接改变卷滚条的状态会引起递归调用resize事件,这是我们不希望发生的。      为了防止递归调用,我们要定义一些的用户自定义事件,在这些事件中处理卷滚条的移去或加入。在用户事件对话框中,输入如下的值: mand加入前四个自定义用户事件的语句为:ADDHSCROLL事件//=TRUEADDVSCROLL事件//=TRUEREMOVEHSCROLL事件uint WinHandleinteger ScrollPos,MinPos,MaxPos//得到窗口句柄Wi