http://msdn.microsoft.com/zh-cn/windows/ff452054(en-us).aspx
1 子窗口(WS_CHILD样式)设置为透明属性无效,也就是说子窗口设置不了透明属性。
2 透明属性只对弹出窗口(WS_POP样式)或者主窗口有效,一旦设置为透明属性,透明窗口中的所有子窗口也跟着透明。
3 只有CDialg、CFrameWnd、和OCX控件窗口可以设置为WS_POP样式。
4 使用WS_EX_TRANSPARENT扩展样式可以设置窗口全透明。
5 使用下面的函数可以设置两种透明方式,全透明和透明度
// hWnd 设置为透明窗口
// clr 透明颜色
// byAlpha 透明度数,0-255
// dwFlags==LWA_COLORKEY clr有效
// dwFlags==LWA_ALPHA byAlpha有效
void SetTransparentWnd(HWND hWnd,COLORREF clr,BYTE byAlpha,DWORD dwFlags)
{
typedef BOOL (FAR PASCAL *Fun)(HWND,COLORREF,BYTE,DWORD);
Fun SetTransparentFun;
HMODULE hModule=LoadLibrary(_T("User32.DLL"));
if(hModule)
{
SetTransparentFun=(Fun)GetProcAddress(hModule,"SetLayeredWindowAttributes");
if(SetTransparentFun&&hWnd)
{
SetWindowLong(hWnd,GWL_EXSTYLE,GetWindowLong(hWnd,GWL_EXSTYLE)|0x80000L);
SetTransparentFun(hWnd,clr,byAlpha,dwFlags);
}
FreeLibrary(hModule);
}
}
6 设置为全透明时,鼠标直接穿透了透明窗口。
7 半透明窗口可以响应鼠标动作。