首先
必须打开win7相应的主题
其次
#include<Dwmapi.h>
#pragmacomment(lib,"dwmapi")
需要win7 SDK。
再次
先定义一个函数
HRESULTEnableBlurBehindWindowMY(HWNDwindow,
bool enable =true,
HRGN region = 0,
bool transitionOnMaximized =false)
{
DWM_BLURBEHINDblurBehind = { 0 };
blurBehind.dwFlags =DWM_BB_ENABLE | DWM_BB_TRANSITIONONMAXIMIZED;
blurBehind.fEnable =enable;
blurBehind.fTransitionOnMaximized =transitionOnMaximized;
if (enable && 0 !=region)
{
blurBehind.dwFlags |=DWM_BB_BLURREGION;
blurBehind.hRgnBlur =region;
}
return ::DwmEnableBlurBehindWindow(window,
&blurBehind);
}
用来打开窗口的玻璃效果。
再再次
可以在
WM_ACTIVATE 消息的时候调用下面代码
MARGINSm ={ -1 };
DwmExtendFrameIntoClientArea(m_hWnd,&m);
//EnableBlurBehindWindowMY(m_hWnd, TRUE);
最后
在WM_ERASEBKGND消息中把背景搞成黑色,因为默认为窗口中为黑色的区域即要半透明的部分。
大家来看看效果哈

因为按钮啊,字体啊之类的为黑色的,所以被和谐了,界面不好看吧?
下面继续,让半透明窗口支持标准控件
首先
在窗口创建后调用
SetWindowLongPtr(m_hWnd,GWL_EXSTYLE, ::GetWindowLongPtr(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);
::SetLayeredWindowAttributes(m_hWnd,
RGB(2,3,4),
0,
LWA_COLORKEY);
把窗口设置为Layer的,然后告诉窗口,RGB(2,3,4)为要透明的颜色。
再次
修改WM_ERASEBKGND消息的处理函数,把窗口背景搞成RGB(2,3,4)的色儿。
再看看效果

差不多了吧。。
再有一个
在控制台窗口中,可以调用
MARGINSm ={ -1 };
DwmExtendFrameIntoClientArea(FindWindow(TEXT("ConsoleWindowClass"),NULL),&m);
让窗口成半透明的样子

很傻吧。。。