四、窗口信息函数
所谓窗口信息函数就是用来获取有关窗口当前状态信息的函数。这类函数主要有∶
函 数 说 明
GetClassInfo 取得指定窗口的类信息结构
GetClassInfoEx 效果类似于GetClassInfo,但增加了一些功能
GetClassLong,GetClassWord 用于获取窗口类信息
SetClassLong,SetClassWord 用于设置窗口类信息
GetClassName 获取窗口类名
GetDesktopWindow 获取整个桌面(屏幕)的窗口句柄
GetWindowLong,GetWindowWord 获取与窗口有关的信息
SetWindowLong,SetWindowWord 设置与窗口有关的信息
GetWindowText 获得窗口文本。它的效果大致等价于窗体或控件的Text属性
GetWindowTextLength 获得窗口文本的长度,用字符数表示。
IsChild 判断某窗口是否为另一窗口的子窗口或从属窗口。
IsIconic 判断某窗口是否处于最小化状态
IsWindow 判断指定的句柄是否为窗口句柄。
IsWindowEnabled 判断指定的窗口是否处于活动状态。
IsWindowVisible 判断某窗口是否可见。
IsZoomed 判断窗口是否处于最大化状态。
SetWindowText 设置窗口文本。大致等价于窗体或控件的Text属性。
大部分窗口信息函数是非常好理解的,按照有关手册中进行的函数说明,按指定数据类型进行调用即可。有必要说明的是,关于类和窗口的样式位。Windows是用一个长整形的数据的位设置方式来记录类和窗口的样式的。其中,窗口样式由一个32位样式以及另一个32
位扩展样式来构成。类样式操作由上述列表中的GetClassLong以及GetClassLong来进行,窗口样式操作由GetWindowLong 以及SetWindowLong来进行。
由于样式位的内容较多,我无法在此给出,您可以参考有关手册。这里有必要提醒大家的是,您想改变或获取当前窗口或类的样式,绝大多数情况可以考虑样式位操作。下面,就这个问题举一个简单了例子来说明。
下面是用BS_LEFTTEXT样式位将VB复选框或选项按钮的文本在左边和右边之间相互移动来、移动去的程序(是附带的Program1.vbp的部分内容)。程序的原理很简单。首先用
GetWindowLong函数获得当前样式位的信息,然后通过位操作来准备新的样式位信息,最后用SetWindowLong实际地去更改。如下∶
Dim f&, dl&
f& = GetWindowLong(Option1.hWnd, GWL_STYLE) '获得当前样式位的信息
If Index = 0 Then
f& = f& Or BS_LEFTTEXT
Else
f& = f& And Not BS_LEFTTEXT
End If
dl& = SetWindowLong(Option1.hWnd, GWL_STYLE, f&) '设置新的样式位
Option1.Refresh
(对Or和And位操作不熟悉的朋友,请参考有关技术资料)
在这里,对样式位不进行更详细讨论,主要有这样一个原因。用SetWindowLong函数改变一个样式位之后,不会导致窗口发生相应的变化(至少不会立即变化)。有些样式位可能在运行时候才会成功变化,而大多数都只在窗口创建时才生效。因为,用API方式创建一个窗体已经超出了本教程的范围,就算我在这里对样式位谈得再多,您可能也没有多大用处。同时,微软公司没有告诉我们哪些样式位在运行期间安全地改变,因此对具体的情况,只好靠自己进行具体试验。而从我个人的实际编程经验来看,没有特别的要求,我们不大会涉及到这些样式位操作,很多都可在VB中很方便地实现。
本教程还附带了一个Program2.vbp的演示程序。是我本人随便编写的,没什么特别希罕之处。想看就看看好了。
最后,想简单提一提的是,使用SetWindowLong函数的时候,改变GWL_WNDPROC
数据是非常危险的(系统或VB经常挂死),即更改窗口函数的位置。一般,这种更改在需要进行子类处理的地方应用到。每次试运行程序,都应当习惯性地进行存盘。
五、其他窗口函数
API中还有以下本教程未列出的窗口函数,以供大家参考。
函数名 说 明
AnyPopup 判断是否存在可见的弹出式窗口
CascadeWindows 令窗口在一个父窗口内层叠显示
CloseWindow 对指定的窗口进行最小化处理(如果它是个钉级窗口)对弹出式及子窗口无效
DestroyWindow 清除指定的窗口以及下属所有子窗口与包容窗口
DrawAnimatedRects 获得窗口打开或关闭的动画效果
EnableWindow 激活或屏蔽(禁用)指定窗口
FlashWindow 令指定窗口的标题闪烁显示
GetUpdateRect 判断需要更新的那个窗口的位置
GetWindowContextHelpId 取得与窗口关联在一起的帮助场景
InvalidateRect 指定窗口内需要更新的全部或部分客户区
IsWindowUnicode 判断一个窗口是否期望文本消息采用Unicode格式
LockWindowUpdate 允许或禁止描绘指定的窗口
RedrawWindow 一个功能强大的函数,用于控制全部或部分窗口重画
ScrollWindow,ScrollWindowEx 滚动显示窗口的全部或部分客户区
SetWindowContextHelpId 设置与窗口关联在一起的帮助场景
ShowOwnedPopups 隐藏或显示从属于指定窗口的所有保容弹出窗口
ShowWindow 用于设置窗口的状态,其中包括窗口的隐藏、显示、最小化、最大化以及激活等
ShowWindowAsync 类似于ShowWindow,增加了对其他进程内的窗口进行操作的能力
TileWindows 令窗口在一个父窗口内平铺显示
UpdateWindow 立即更新窗口内需要更新的任何部分
ValidateRect 指出全部或部分矩形已经更新,毋需再更新
其中,FlashWindow函数非常有趣,不妨大家试一试。
阅读(1447) | 评论(0) | 转发(0) |