關於Windows2000透明窗體的製作(重發) (轉)

gugu99發表於2008-07-07
關於Windows2000透明窗體的製作(重發) (轉)[@more@]

哎,剛才洋洋傻傻寫了200多字,竟然提交失敗?!讓人幾近暈倒,只好重寫了。嗯,現在開始..

透明窗體不知注意到沒有?看過的是不是覺得很cool?我是這樣認為的,所以第一次在一個叫Insight的中看到後,就在到處找他是如何做的。後來發現是透過一種圖形運算得到的,就是的介面和其底圖進行一定的運算,如alpha運算,就可以得到透明的效果。但寫起來好煩啊。昨天無意見到已很好用的,專門做透明的,很好用,便寫出來,大家看看.

先寫個例子,的,這個目前最熟了。

procedure DoTrans();

var

  l: LongInt;

begin

  l := GetWindowLong(Handle, GWL_EXSTYLE);

  l := l or WS_EX_LAYERED;

  SetWindowLong(Handle, GWL_EXSTYLE, l);

  SetLayeredWindowAttributes(Handle, 0, 125, LWA_ALPHA);

end;

你可以先試試,應該很好用的,關鍵就是API函式SetLayeredWindowAttributes(),這個是2000才有的一個API,所以也只能在2000下執行,的淡進淡出效果可能就是用的這個函式。

Delphi6已經封裝了這個API,Delphi5的話,就要自己進行函式宣告瞭,

function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external ‘user32.dll';

現在從MSDN裡把它的定義考出來,分析一下。

BOOL SetLayeredWindowAttributes( HWND , // handle to the layered window COLORREF , // specifies the color key BYTE , // value for the blend function D // action );


第一個引數:hwnd是指向要操作的視窗的控制程式碼,沒什麼要說的,基本API都需要的.


第二個引數:crKey是指定要透明的顏色的顏色值,這個引數和第四個引數在制定


為LWA_COLORKEY時才有用,在LWA_ALPHA引數下,一般用0;當指定要透明的顏色值時,


視窗中的制定顏色就會變得‘鏤空’!


第三個引數: bAlpha是透明運算的一個引數,簡單地說就是透明度,0最透明,就看不到了,


255不透明,和平常的效果一樣了。


第四個引數:dwFlags由兩個值LWA_COLORKEY和LWA_ALPHA,用於決定用何種方式進行透明處理。


一般用LWA_ALPHA值就可以了.


好了,就這麼多了,MSDN裡有詳細的介紹。


codejie. 2001/08/31


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1006877/,如需轉載,請註明出處,否則將追究法律責任。

相關文章