程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 關於Windows2000透明窗體的制作(重發)

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

編輯:Delphi

哎,剛才洋洋傻傻寫了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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved