哎,剛才洋洋傻傻寫了200多字,竟然提交失敗?!讓人幾近暈倒,只好重寫了。嗯,現在開始..
透明窗體不知注意到沒有?看過的是不是覺得很cool?我是這樣認為的,所以第一次在一個叫SourceInsight的軟件中看到後,就在到處找他是如何做的。後來發現是通過一種圖形運算得到的,就是程序的界面和其底圖進行一定的運算,如alpha運算,就可以得到透明的效果。但寫起來好煩啊。昨天無意見到已很好用的API函數,專門做透明的,很好用,便寫出來,大家看看.
先寫個例子,Delphi的,這個目前最熟了。
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(),這個是Windows2000才有的一個API,所以也只能在2000下運行,Win2000的淡進淡出效果可能就是用的這個函數。
Delphi6已經封裝了這個API,Delphi5的話,就要自己進行函數聲明了,
function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint; stdcall; external ‘user32.dll;
現在從MSDN裡把它的定義考出來,分析一下。
BOOL SetLayeredWindowAttributes( HWND hwnd, // handle to the layered window COLORREF crKey, // specifies the color key BYTE bAlpha, // value for the blend function DWORD dwFlags // action );
第一個參數:hwnd是指向要操作的窗口的句柄,沒什麼要說的,基本API都需要的.
第二個參數:crKey是指定要透明的顏色的顏色值,這個參數和第四個參數在制定
為LWA_COLORKEY時才有用,在LWA_ALPHA參數下,一般用0;當指定要透明的顏色值時,
窗口中的制定顏色就會變得‘镂空’!
第三個參數: bAlpha是透明運算的一個參數,簡單地說就是透明度,0最透明,就看不到了,
255不透明,和平常的效果一樣了。
第四個參數:dwFlags由兩個值LWA_COLORKEY和LWA_ALPHA,用於決定用何種方式進行透明處理。
一般用LWA_ALPHA值就可以了.
好了,就這麼多了,MSDN裡有詳細的介紹。
codejie. 2001/08/31