现在的位置: 首页 > 综合 > 正文

LabVIEW 实现窗口置顶与透明显示

2013年08月09日 ⁄ 综合 ⁄ 共 2332字 ⁄ 字号 评论关闭

LabVIEW 实现窗口置顶与透明显示

laiping  2008-8-10

摘要:

本文介绍了如何在LabVIEW 实现窗口置顶与透明显示。

 

关键字:

LabVIEWAPI、窗口置顶、透明显示

 

1.窗口置顶与透明显示功能简单介绍

窗口置顶是指运行程序窗口处于屏幕的最前端显示,即屏幕Z序的顶层窗口,位于其它窗口之上。

透明显示是指窗口以一定的透明度显示,可以查看被窗口覆盖下的内容。

 

2.相关API

LabviewVI属性节点Is Frontmostf无法实现窗口置顶功能,无相关VI直接控制窗口置顶与透明显示,所以要实现此功能得调用相关Windows API。主要使用到以下二个API

SetLayeredWindowAttribute SetWindowPos

21

Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

参数说明:

Hwnd:是透明窗体的句柄

crKey:为颜色值,// 掩码的颜色,可以用RGB(r,g,b)来指定

bAlpha:是透明度,取值范围是[0,255]

dwFlags:是透明方式,可以取两个值:

当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;

当取值为LWA_COLORKEY时,窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。

LWA_ALPHA = 0x2

LWA_COLORKEY = 0x1

也可以取两个值的组合:LWA_ALPHA Or LWA_COLORKEY。这样crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。

要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性。(旧的sdk没有定义这个属性,所以可以直接指定为0x80000)

22

Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。返回值:Long,非零表示成功,零表示失败。

参数说明:

hwnd:欲定位的窗口

hWndInsertAfter:窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一:

0:将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序

-1:将窗口置于列表顶部,并位于任何最顶部窗口的前面

-2:将窗口置于列表顶部,并位于任何最顶部窗口的后面

x:窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示

y:窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示

cx:指定新的窗口宽度

cy:指定新的窗口高度

wFlags:可以是下面一个值或几个数值的和:

&H1:不改变大小

&H2:不改变位置

&H4:不改变Z序列(忽略 hWndInsertAfter 参数)

&H10:不激活窗体

&H40:显示窗体

&H80:隐藏窗体

注解:窗口成为最顶级窗口后,它下属的所有窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有下属和物主窗口也会转为非最顶级。Z序列用垂直于屏幕的一根假想Z轴量化这种从顶部到底部排列的窗口顺序。

 

3LabVIEW实现窗口置顶与透明显示步骤

31获取当前窗口句柄

要使窗口置顶与透明显示,首先得获取当前窗口句柄,方法是调用Windows API函数FindWindowA,其原型为

HWND FindWindowLPCTSTR IpClassNameLPCTSTR IpWindowName

IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函数产生的全局成员。该成员为16位,必须位于IpClassName的低 16位,高位必须为 0
IpWindowName
:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。

返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL

注意:在LV中调用该函数,第一个参数lpClassName其类型必须指定为LONG,否则不能成功获取窗口句柄。第二个参数lpWindowName类型为String,窗口名可以由LV属性节点LV Name获取。

32设置窗口属性

首先调用GetWindowLongA函数获取当前窗口信息,然后调用SetWindowLongA函数改变窗口相关信息。

33窗口置顶

调用SetWindowPos函数使当前窗口处于顶层。

34窗口透明

调用SetLayeredWindowAttributes函数使窗口透明。

 

4.程序框图

41 Block Diagram如下图所示

 

42 Front Panel如下图所示:

 

5.结语

本文详细讲解在LV中实现窗口置顶与透明显示的操作步骤。结合Windows APILabVIEW可以实现很多用其自身语言无法实现的功能。一个需要特别注意的是在调用相关API函数时,各参数类型一定要与LV的类型相匹配,否则不能成功操作。

参考文档:

新编Windows API参考大全。

抱歉!评论已关闭.