win7 玻璃效果

首先

必须打开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);
第1个函数是为了让窗口边界标题栏之类的也作为客户端绘图;第二个是指定窗口打开玻璃效果,可以指定区域。
 

最后

在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);
让窗口成半透明的样子
很傻吧。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值