创建不规则窗口的三种方法:通过区域相关API设置窗口的区域SetWindowRgn;通过SetLayeredWindowAttributes来指定特殊的透明颜色,让背景图的部分位置全透从而实现窗口的“不规则”;通过UpdateLayeredWindow来指定特殊颜色透明或者根据图片的ALPHA值来设置窗口全透。
方法一是是真正的异形不规则窗口,而方法二、三则是通过部分区域全透来实现异形。这里只讨论后面两种方法,使用广泛也易于实现。
不管是SetLayeredWindowAttributes还是UpdateLayeredWindow在调用前都需要为窗口加上WS_EX_LAYERED扩展属性,否则API调用失败,详见MSDN;
<span style="color:#999999;"> DWORD dwExStyle=GetWindowLong(m_hWnd, GWL_EXSTYLE);
::SetWindowLong(m_hWnd, GWL_EXSTYLE, dwExStyle|WS_EX_LAYERED);</span>
1、使用SetLayeredWindowAttributes来创建不规则窗口
首先需要一张图,需要全透的地方我们用同一种颜色来填充:
需要透明的区域我用的纯白色0