天天看點

窗體的Alpha通道透明色支援

參考: 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)