LabVIEW 实现窗口置顶与透明显示 | 您所在的位置:网站首页 › 如何使窗口显示在最前 › LabVIEW 实现窗口置顶与透明显示 |
LabVIEW 实现窗口置顶与透明显示 laiping 2008-8-10 摘要: 本文介绍了如何在LabVIEW 实现窗口置顶与透明显示。
关键字: LabVIEW、API、窗口置顶、透明显示
1.窗口置顶与透明显示功能简单介绍 窗口置顶是指运行程序窗口处于屏幕的最前端显示,即屏幕Z序的顶层窗口,位于其它窗口之上。 透明显示是指窗口以一定的透明度显示,可以查看被窗口覆盖下的内容。
2.相关API Labview的VI属性节点Is Frontmostf无法实现窗口置顶功能,无相关VI直接控制窗口置顶与透明显示,所以要实现此功能得调用相关Windows API。主要使用到以下二个API: SetLayeredWindowAttribute 、SetWindowPos。 2.1 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)。 2.2 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轴量化这种从顶部到底部排列的窗口顺序。
3.在LabVIEW实现窗口置顶与透明显示步骤 3.1获取当前窗口句柄 要使窗口置顶与透明显示,首先得获取当前窗口句柄,方法是调用Windows API函数FindWindowA,其原型为 HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName) IpClassName :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobafAddAtom函数产生的全局成员。该成员为16位,必须位于IpClassName的低 16位,高位必须为 0。IpWindowName:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。 返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL。 注意:在LV中调用该函数,第一个参数lpClassName其类型必须指定为LONG,否则不能成功获取窗口句柄。第二个参数lpWindowName类型为String,窗口名可以由LV属性节点LV Name获取。 3.2设置窗口属性 首先调用GetWindowLongA函数获取当前窗口信息,然后调用SetWindowLongA函数改变窗口相关信息。 3.3窗口置顶 调用SetWindowPos函数使当前窗口处于顶层。 3.4窗口透明 调用SetLayeredWindowAttributes函数使窗口透明。
4.程序框图 4.1 Block Diagram如下图所示:
5.结语 本文详细讲解在LV中实现窗口置顶与透明显示的操作步骤。结合Windows API,LabVIEW可以实现很多用其自身语言无法实现的功能。一个需要特别注意的是在调用相关API函数时,各参数类型一定要与LV的类型相匹配,否则不能成功操作。 参考文档: 新编Windows API参考大全。 |
CopyRight 2018-2019 实验室设备网 版权所有 |