感悟VB细水长流话API(五-1)

2008-02-23 07:03:34来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

1 2 3 下一页

感悟VB细水长流话API(五-1)

  在前面几期的连载中我们学到了一些有用的API和相关知识,这段时间里有一些读者来信问了一些问题,我发现这些问题大部分都出在很小的错误上,比如变量的声明、API声明的函数名写错等,其实这些都是可以避免的。在一开始我就说明了让VB进行显式声明的重要性,还有API的声明是可以从API浏览器中直接复制的,不要自己去键入,不然容易出现难以发现的错误。

第六话 窗体和风格

  在Windows中大部分东西都是一个窗口,窗体、菜单、工具栏、状态栏、按钮、文本框……不要觉得奇怪,它们都是窗口——Window(是否从一个侧面说明了这个操作系统为何叫Windows,加了复数的Window)。

  从VB的IDE中你可以更改一个窗体的外观,图1是 IDE中各种外框风格的窗体。

  你可以看到它们有的有边框,有的没有;有的有标题栏,有的没有;有的有最大最小化按钮,有的没有。这些窗体的边框风格都是在窗体被创建时就定下来的。我们在建立VB程序的窗体时,不需要自己写创建窗体的代码,省去了许多重复的工作,但我们也因此失去了解其中秘密的机会。许多情况下窗体风格是在运行时就一直不变的,但有时我们要求在运行时改变,然而,类似BorderStyle等许多设置外观的属性只能在设计时才有效,在这种情况下,我们的这项工作就无法完成。所幸的是,实际上窗体的风格是能够在运行时被改变的,用SetWindowLong,我们就能解决这个问题。

  以前我写过子类的文章,用的也是SetWindowLong,但这次我们不是要用子类,它比子类简单得多。下面给出SetWindowLong的声明:

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

  要改变窗体的风格,我们需要用一个常量来使 SetWindowLong知道我们对窗体进行风格设置:GWL_STYLE。

  从API浏览器得到GWL_STYLE的值后,调用时,它是作为第二个参数传递出去的。那么第三个参数呢?这里显得有点复杂,因为它不是一个单一的参数,而是一组参数的组合。

  就如上面我所说的,一个窗体可能有边框,可能有最大最小化按钮,可能有标题栏,但也有可能一部分或全部都没有,如果我们在这里只用一个参数为其设置风格,那么这么多风格就需要一种特殊方法,使该API能够知道我们包含了哪些风格在里面。这就是Or运算。Or运算是把两个数值进行或运算,而微软为了可以方便分离进行Or运算的值,对这些值都精心设计过,因此我们可以放心地将它们组合。如,把 1 和 2 进行Or运算,然后传递给函数,函数会自己分离出 1 和 2,就知道我们传递了 1 和 2 两个值。但有时我们不仅是要组合几个值,而且要把一个组里的某个值去除,所以还需要用另一种方法: And Not(这里的And 不是布尔运算的And,而是位运算的And)。比如把 1 和 2 进行 Or 运算后的值中的 1 去掉,则将其 And Not 1。如果想知道是否含有一个值,可以用And,如 If 64 And 3 Then ……这里只是提供一种方法让你可以使用,如果你想知道它们是如何工作的,我建议你参考位运算的相关书籍。

上一篇: 用MCI指令进行多媒体编程
下一篇: 小叮当也战江湖—VB实例七日谈(一)

1 2 3 下一页

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Visual Basic下工具条的制作之一

下一篇:VB多媒体程序设计详解