在使用Visual Basic 6透明化窗口之前,你需要设置窗口的WS_EX_LAYERED属性。你可以通过SetWindowLong这个API函数做到这一点。然后,你可以用API函数SetLayeredWindowAttributes来调整透明程度,如程序清单A所示。
程序清单B所示的Command1_Click事件的代码透明化处理窗口。
Command2_Click事件演示了如何把透明化的窗口恢复成原来的状态,如程序清单C所示。
在.NET中透明化窗口比vb 6.0更容易实现。为此,你只需要设置Opacity属性为0到1之间的一个数值:1代表不透明,0代表完全透明。
使用透明的窗口向用户提供信息可以节省宝贵的屏幕空间。这对灵活显示被你的应用程序窗口覆盖的其它窗口的信息是很有用的。
vb和vb.NET下的透明属性允许窗口传递发生在该窗口下的鼠标消息,这个机制对使用透明窗口来说尤为有用。通过传递鼠标消息,透明化窗口就不会妨碍用户与透明化窗口下面的窗口进行交互。
在Visual Basic 6中,设置窗口的WS_EX_TRANSPARENT属性可以控制窗口的类型。这是通过调用SetWindowLong API函数来实现的,如程序清单D
程序清单E中Command1_Click事件的代码演示了如何使窗口传递鼠标消息。
为了反转透明性,你可以像程序清单F那样重新设置WS_EX_TRANSPARENT属性,它将移动窗口。
注意,设置WS_EX_TRANSPARENT属性会影响到整个窗口,用户不能关闭窗口、用鼠标选择该窗口、或者选择窗体(form)上的任何控件。应用程序仍可以通过代码设置来关闭窗口。你可以通过透明化窗口来实现对重要数据的灵活显示。
在.NET中,视图的TransparencyKey属性与vb 6.0中的WS_EX_TRANSPARENT属性略微有些区别。通过设置.NET的TransparencyKey,不仅可以使得窗口的用户区在视觉上透明,而且鼠标事件也是“透明的”。不过这样你就不能选择控件和窗口标题栏了。很显然,这种程度的控制比完全禁止窗口要好的多。当应用程序的用户在你的透明化窗口下选择窗体时,通过设置窗口传递鼠标消息属性,应用程序就可以显示用户操作对应的信息了。