參考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=2190768
Windows 2000後,為了支援類似MAC界面的Alpha通道混合效果,提供了GDI+,提供了很多的界面功能函數,可以實作很好的界面效果。例如可以使用UpdateLayeredWindow來實作窗體的顔色透明。但是一旦 Form 被定義為利用 LayeredWindow ,視窗的繪圖不再響應沿用多年的 WM_Paint 消息。
UpdateLayeredWindow(hwnd:HWND; // 視窗句柄
hdcDst:HDC; // 目标 DC
ptDst:pPoint; // 目标的 TopLeft
Size:pSize; // 顯示 Size
hdcSrc:HDC; // 源 DC
ptSrc:pPoint; // 源 DC 的 TopLeft
crKey:COLORREF; // 透明顔色值
Blend:pBlendFunction; // Alpha 混合函數
dwFlags:DWord // 一組标志位常量
);
這個函數不但可以設定 Alpha Blend ,還可以完成類似本例中的異形視窗顯示。标志常量有以下幾個:
ULW_COLORKEY = $00000001; // 透明顔色設定是需要的
ULW_ALPHA = $00000002; // Alpha 混合是需要的
ULW_OPAQUE = $00000004; // 保持不透明
不管設定哪些常量,首先與 SetLayeredWindowAttributes 函數一樣,
需要對視窗設定一個新的擴充風格标志:WS_EX_LAYERED 。
設定視窗的擴充标志,隻對 Windows2000 以上作業系統有效,設定方法與設定普
通視窗風格的方法一樣:
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle,GWL_EXSTYLE)