去玻璃
来源:互联网 发布:哪个网站有卖淘宝小号 编辑:程序博客网 时间:2024/04/27 18:16
ref : http://hi.baidu.com/lifuchao2008/blog/item/f23ea71eee047ffc1ad57640.html
VC实现去掉vista窗口的玻璃效果
最近发现以前的自绘皮肤窗口,在VISTA系统开启玻璃效果的情况下,非客户区的皮肤总是被那层玻璃盖着,甚感烦躁,经过查找资料,发现那个玻璃效果是VISTA下有个dwm.exe弄的,微软给出了相关API,可以自己定制某个窗口的效果。
http://msdn.microsoft.com/en-us/library/aa969540.aspx,该API的介绍,如果英文不好的话,可以用火狐浏览器翻译该网页,效果还不错。
如果编译器是vs2008以上的版本的话,代码非常简单,只需要在窗口初始化的地方加下如下代码:
DWMNCRENDERINGPOLICY ncrp = DWMNCRP_DISABLED;
DwmSetWindowAttribute(GetSafeHwnd(),DWMWA_NCRENDERING_POLICY,&ncrp,sizeof(ncrp));
再包含下#include <dwmapi.h>
如果编译环境低于VS2008并且没有 VISTA SDK的话是如下的代码:
由于编译环境中没有dwmapi.h文件,所以需要的一些定义就得自己加了,如下加了两个枚举。
enum DWMWINDOWATTRIBUTE
{
DWMWA_NCRENDERING_ENABLED = 1, // [get] Is non-client rendering enabled/disabled
DWMWA_NCRENDERING_POLICY, // [set] Non-client rendering policy
DWMWA_TRANSITIONS_FORCEDISABLED, // [set] Potentially enable/forcibly disable transitions
DWMWA_ALLOW_NCPAINT, // [set] Allow contents rendered in the non-client area to be visible on the DWM-drawn frame.
DWMWA_CAPTION_BUTTON_BOUNDS, // [get] Bounds of the caption button area in window-relative space.
DWMWA_NONCLIENT_RTL_LAYOUT, // [set] Is non-client content RTL mirrored
DWMWA_FORCE_ICONIC_REPRESENTATION, // [set] Force this window to display iconic thumbnails.
DWMWA_FLIP3D_POLICY, // [set] Designates how Flip3D will treat the window.
DWMWA_EXTENDED_FRAME_BOUNDS, // [get] Gets the extended frame bounds rectangle in screen space
DWMWA_LAST
};
typedef enum _DWMNCRENDERINGPOLICY {
DWMNCRP_USEWINDOWSTYLE,
DWMNCRP_DISABLED,
DWMNCRP_ENABLED,
DWMNCRP_LAST
} DWMNCRENDERINGPOLICY;
然后在动态链接库中得到去掉玻璃效果的函数(DwmSetWindowAttribute)进而执行该函数
typedef HRESULT (WINAPI * TmpFun)(HWND,DWORD,LPCVOID,DWORD);
HMODULE library = ::LoadLibrary("dwmapi.dll");
TmpFun DwmSetWindowAttributeEX;
if (0 != library)
{
DwmSetWindowAttributeEX = (TmpFun)::GetProcAddress(library,
"DwmSetWindowAttribute");
if (DwmSetWindowAttributeEX)
{
DWMNCRENDERINGPOLICY ncrp = DWMNCRP_DISABLED;
(*DwmSetWindowAttributeEX)(GetSafeHwnd(),DWMWA_NCRENDERING_POLICY,&ncrp,sizeof(ncrp));
}
VERIFY(::FreeLibrary(library));
}
http://msdn.microsoft.com/en-us/library/aa969540.aspx,该API的介绍,如果英文不好的话,可以用火狐浏览器翻译该网页,效果还不错。
如果编译器是vs2008以上的版本的话,代码非常简单,只需要在窗口初始化的地方加下如下代码:
DWMNCRENDERINGPOLICY ncrp = DWMNCRP_DISABLED;
DwmSetWindowAttribute(GetSafeHwnd(),DWMWA_NCRENDERING_POLICY,&ncrp,sizeof(ncrp));
再包含下#include <dwmapi.h>
如果编译环境低于VS2008并且没有 VISTA SDK的话是如下的代码:
由于编译环境中没有dwmapi.h文件,所以需要的一些定义就得自己加了,如下加了两个枚举。
enum DWMWINDOWATTRIBUTE
{
DWMWA_NCRENDERING_ENABLED = 1, // [get] Is non-client rendering enabled/disabled
DWMWA_NCRENDERING_POLICY, // [set] Non-client rendering policy
DWMWA_TRANSITIONS_FORCEDISABLED, // [set] Potentially enable/forcibly disable transitions
DWMWA_ALLOW_NCPAINT, // [set] Allow contents rendered in the non-client area to be visible on the DWM-drawn frame.
DWMWA_CAPTION_BUTTON_BOUNDS, // [get] Bounds of the caption button area in window-relative space.
DWMWA_NONCLIENT_RTL_LAYOUT, // [set] Is non-client content RTL mirrored
DWMWA_FORCE_ICONIC_REPRESENTATION, // [set] Force this window to display iconic thumbnails.
DWMWA_FLIP3D_POLICY, // [set] Designates how Flip3D will treat the window.
DWMWA_EXTENDED_FRAME_BOUNDS, // [get] Gets the extended frame bounds rectangle in screen space
DWMWA_LAST
};
typedef enum _DWMNCRENDERINGPOLICY {
DWMNCRP_USEWINDOWSTYLE,
DWMNCRP_DISABLED,
DWMNCRP_ENABLED,
DWMNCRP_LAST
} DWMNCRENDERINGPOLICY;
然后在动态链接库中得到去掉玻璃效果的函数(DwmSetWindowAttribute)进而执行该函数
typedef HRESULT (WINAPI * TmpFun)(HWND,DWORD,LPCVOID,DWORD);
HMODULE library = ::LoadLibrary("dwmapi.dll");
TmpFun DwmSetWindowAttributeEX;
if (0 != library)
{
DwmSetWindowAttributeEX = (TmpFun)::GetProcAddress(library,
"DwmSetWindowAttribute");
if (DwmSetWindowAttributeEX)
{
DWMNCRENDERINGPOLICY ncrp = DWMNCRP_DISABLED;
(*DwmSetWindowAttributeEX)(GetSafeHwnd(),DWMWA_NCRENDERING_POLICY,&ncrp,sizeof(ncrp));
}
VERIFY(::FreeLibrary(library));
}
0 0
- 去玻璃
- 小心玻璃
- 玻璃夕阳
- 如镜如玻璃
- 玻璃结
- 玻璃效果
- 玻璃翠
- 玻璃效果
- 玻璃效果
- 玻璃球体
- 玻璃城
- 玻璃旅行
- 玻璃切割
- 玻璃破碎玻璃破碎机玻璃回收厂
- 分享玻璃知识:玻璃油墨的分类
- 什么是艺术玻璃艺术玻璃影视墙
- 1047片玻璃
- 韩剧《玻璃鞋》
- Java编程思想 第二章读书笔记
- matlab入门----符号运算
- Java NIO系列教程(三) Buffer
- NYOJ17 单调递增最长子序列
- android Unable to inflate view tag without class attribute
- 去玻璃
- 79. Word Search(unsolved)
- 设计模式随笔之观察者模式(Observer)
- 弄透VMware虚拟机的网络设置三大模式:桥接模式,主机模式、NAT模式
- ViewGroup事件分发源码分析
- 约束:确保数据的完整性(主键,唯一,检查,默认,非空,外键)
- Why doesn't `sudo cd /var/named` work?
- 图像边缘检测原理&何谓角点及Harris角点的基本原理&SURF特征提取简介
- 所有的经历都是为了更好的前行