Chinaunix首页 | 论坛 | 博客
  • 博客访问: 125921
  • 博文数量: 37
  • 博客积分: 1490
  • 博客等级: 上尉
  • 技术积分: 323
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-01 16:38
文章分类

全部博文(37)

文章存档

2011年(1)

2010年(23)

2009年(13)

我的朋友

分类: WINDOWS

2010-04-08 15:01:47

四、窗口信息函数

    所谓窗口信息函数就是用来获取有关窗口当前状态信息的函数。这类函数主要有∶

函   数                                            说    明
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函数非常有趣,不妨大家试一试。
阅读(1344) | 评论(0) | 转发(0) |
0

上一篇:窗口函数

下一篇:Windows Shell 编程

给主人留下些什么吧!~~