如何用VB製作半透明窗體?

2021-08-23 11:47:36 字數 1603 閱讀 5581

函式setlayeredwindowattributes

使用這個函式,可以輕鬆的實現半透明窗體。按照微軟的要求,透明窗體窗體在建立時應使用ws_ex_layered引數(用createwindowex),或者在建立後設定該引數(用setwindowlong),我選用後者。全部函式、常量宣告如下:

private declare function getwindowlong lib "user32" alias "getwindowlonga" (byval hwnd as long, byval nindex as long) as long

private declare function setwindowlong lib "user32" alias "setwindowlonga" (byval hwnd as long, byval nindex as long, byval dwnewlong as long) as long

private 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為顏色值,balpha是透明度,取值範圍是[0,255],dwflags是透明方式,可以取兩個值:當取值為lwa_alpha時,crkey引數無效,balpha引數有效;當取值為lwa_colorkey時,balpha引數有效而窗體中的所有顏色為 crkey的地方將變為透明--這個功能很有用:我們不必再為建立不規則形狀的窗體而呼叫一大堆區域分析、建立、合併函式了,只需指定透明處的顏色值即可,哈哈哈哈!請看具體**。

private const ws_ex_layered = &h80000

private const gwl_exstyle = (-20)

private const lwa_alpha = &h2

private const lwa_colorkey = &h1

**一:乙個半透明窗體

private sub form_load()

dim rtn as long

rtn = getwindowlong(hwnd, gwl_exstyle)

rtn = rtn or ws_ex_layered

setwindowlong hwnd, gwl_exstyle, rtn

setlayeredwindowattributes hwnd, 0, 200, lwa_alpha

end sub

**二:形狀不規則的窗體

private sub form_load()

dim rtn as long

borderstyler=0

rtn = getwindowlong(hwnd, gwl_exstyle)

rtn = rtn or ws_ex_layered

setwindowlong hwnd, gwl_exstyle, rtn

setlayeredwindowattributes hwnd, &hff0000, 0, lwa_colorkey '將扣去視窗中的藍色

end sub

VB無所不能之四 製作透明和半透明窗體

vb無所不能之四 製作透明和半透明窗體 我們經常可以看到這樣的窗體,覺得很炫,如圖所示 同樣,對windows系統方面的程式設計似乎首先想到的絕對不是vb,而大部分程式設計師想到的一定是vc。其實,vb對於這個實現非常方便且簡單,用到了 user32 中的setlayeredwindowattrib...

VB無所不能之四 製作透明和半透明窗體

vb無所不能之四 製作透明和半透明窗體 我們經常可以看到這樣的窗體,覺得很炫,如圖所示 同樣,對windows系統方面的程式設計似乎首先想到的絕對不是vb,而大部分程式設計師想到的一定是vc。其實,vb對於這個實現非常方便且簡單,用到了 user32 中的setlayeredwindowattrib...

如何製作半透明視窗

用過金山詞霸的朋友,一定會為其半透明的翻譯提示視窗而稱奇。究竟這種視窗是如何做出來的呢?下面我們將來 這種半透明的視窗的製作方法。一 原理 首先,我們先從透明視窗說起,其實透明視窗就是可以透過視窗看到它背景。所以,我們可以將視窗後面的背景圖象,顯示在視窗前面,就可實現透明視窗的效果了。至於半透明的效...