天天看点

窗体的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)