层窗体 – 这个概念和photoshop的图层概念是一样的, 每一层上可以用许多UI或控件, 层与层之间可以实现透明以及部分切除.
一、代码演示
SetWindowLongPtr(hWnd, GWL_EXSTYLE, WS_EX_LAYERED | GetWindowLongPtr(hWnd, GWL_EXSTYLE));
SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), lpsi.nPos, LWA_ALPHA);
SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), lpsi.nPos, LWA_ALPHA);
SetLayeredWindowAttributes(hWnd, RGB(255, 0, 0), nPos, LWA_ALPHA|LWA_COLORKEY);
二、要点学习
1. 窗体必须设置WM_EX_LAYERED属性
2. BOOL SetLayeredWindowAttributes(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags )
功能: 设置层窗体的属性
hWnd -- 窗体的句柄,
crKey -- 将被透明的颜色
bAlpha -- 透明度,取值范围是(0,255),其中0代表全透明,255代表不透明。
dwFlags -- 透明方式,可以取两个值:
当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
当取值为LWA_COLORKEY时,窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。
当取值为LWA_ALPHA 和 LWA_COLORKEY时, 窗体中所有颜色为crKey的地方将变为透明,其他位置以bAlpha度透明
三、测试效果
未colorkey及alpha处理前 colorKey(255,0,0)及alpha(216)后