自从Windows Vista系统引入窗口管理器(WDM)的概念后,Aero效果几乎成了Windows界面的灵魂。对于程序来说如何利用好这个天然的美化特效呢?

微软提供一套API用于窗口管理相关的开发,均以Dwm开头,下面分别介绍一下:

1、判断是否开启Aero特效
HRESULT WINAPI DwmIsCompositionEnabled(
  _Out_  BOOL *pfEnabled
);

使用例子:

BOOL IsCompositionEnabled()
{HMODULE hMod = ::LoadLibrary(L"dwmapi.dll");BOOL bRet = FALSE;if (NULL != library){if (NULL != ::GetProcAddress(hMod, "DwmIsCompositionEnabled")){BOOL bEnabled = FALSE;bRet = SUCCEEDED(::DwmIsCompositionEnabled(&bEnabled)) && bEnabled;}VERIFY(::FreeLibrary(hMod));}return bRet;
}

2、启用Aero特效:
HRESULT WINAPI DwmEnableComposition(
  UINT uCompositionAction
);

使用例子:

HRESULT hr = S_OK;
// Disable DWM Composition
hr = DwmEnableComposition(DWM_EC_DISABLECOMPOSITION);
if (SUCCEEDED(hr))
{// ...
}

3、启用合成特效:
HRESULT WINAPI DwmEnableBlurBehindWindow(
  HWND hWnd,
  _In_  const DWM_BLURBEHIND *pBlurBehind
);

typedef struct _DWM_BLURBEHIND {
  DWORD dwFlags; // 标识DWM_BB_ENABLE|DWM_BB_BLURREGION
  BOOL  fEnable; // 是否启用
  HRGN  hRgnBlur; // 合成RGN区域
  BOOL  fTransitionOnMaximized;
} DWM_BLURBEHIND, *PDWM_BLURBEHIND;

使用例子:

HRESULT EnableBlurBehind(HWND hwnd)
{HRESULT hr = S_OK;// Create and populate the Blur Behind structureDWM_BLURBEHIND bb = {0};// Enable Blur Behind and apply to the entire client areabb.dwFlags = DWM_BB_ENABLE;bb.fEnable = true;bb.hRgnBlur = NULL;// Apply Blur Behindhr = DwmEnableBlurBehindWindow(hwnd, &bb);if (SUCCEEDED(hr)){// ...}return hr;
}

附录:启用Aero特效以后,窗口上绘制的文字会看不清,需要用下面的函数来替换DrawText和TextOut函数

void DrawAeroText(HDC hDC, LPCTSTR pstrText, int nLen, RECT rcText, DWORD dwTextFlags, int iGlowSize)
{//获取主题句柄  HTHEME hThm = OpenThemeData(GetDesktopWindow(), L"TextStyle");  DTTOPTS dttopts = {0};  dttopts.dwSize = sizeof(DTTOPTS);  dttopts.dwFlags = DTT_GLOWSIZE | DTT_COMPOSITED;  dttopts.iGlowSize = iGlowSize;  //发光的范围大小 //绘制文本  HRESULT hr = DrawThemeTextEx(hThm, hDC, TEXT_LABEL, 0, pstrText, -1, dwTextFlags , &rcText, &dttopts); if(FAILED(hr)) return;CloseThemeData(hThm);
}

By Troy

联系我:QQ(656067418)

如何利用Win7Aero特效来美化你的程序窗口相关推荐

  1. python做小程序-【实战案例】利用Python做出趣味版防沉迷小程序

    今天带领大家利用Python做出趣味版防沉迷小程序 查询电脑的所有进程 用Python循环检测电脑软件的运行情况,当发现游戏软件时弹出警告窗口,并截图保存.学会这项技能,就再也不怕孩子偷偷打游戏了.下 ...

  2. 利用freopen()函数和fc命令简化程序调试

    大家在参加ACM比赛或者参加c/c++实验技能竞赛的时候,如果遇到大量的输入和大量的输出时,调试起来很不方便.一来如果结果不正确的话,需要重复输入大量数据:二来如果大量输出的话,得仔细检查输出结果与正 ...

  3. 【java】 linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

  4. nodejs android 推送,利用Nodejs怎么实现一个微信小程序消息推送功能

    利用Nodejs怎么实现一个微信小程序消息推送功能 发布时间:2021-01-20 13:55:29 来源:亿速云 阅读:92 作者:Leah 今天就跟大家聊聊有关利用Nodejs怎么实现一个微信小程 ...

  5. matlab是那个国家,这是一个老外写的利用曲率来识别硬币的MATLAB程序。作者所在国家的硬币偏黄色,拍摄的时候反光比较少...

    这是一个老外写的利用曲率来识别硬币的MATLAB程序.作者所在国家的硬币偏黄色,拍摄的时候反光比较少 2016-08-22 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 这是一个老外写的利 ...

  6. 微信小程序本地存储存储_如何利用本地存储构建快速的应用程序

    微信小程序本地存储存储 by Nikita Kozlov 由Nikita Kozlov 如何利用本地存储构建快速的应用程序 (How to leverage Local Storage to buil ...

  7. python如何并发运行2个软件_如何利用并发性加速你的python程序(二):I/O 绑定程序加速...

    原标题:如何利用并发性加速你的python程序(二):I/O 绑定程序加速 雷锋网 AI 科技评论按,本文是工程师 Jim Anderson 分享的关于「通过并发性加快 python 程序的速度」的文 ...

  8. 使用Flash彻底美化你的程序

    曾经在VCKbase(VC知识库)网站看到过一篇关于Flash的文章,叫做<在VC中使用 Flash 美化你的程序>,文章中介绍的是使用Flash控件在对话框程序中播放Flash文件.由于 ...

  9. 利用VB.NET绘制简易表白小程序

    完整代码位于文末 上一篇:利用Python绘制简易爱心表白小程序 趁现在有点闲情还是来整点活 效果 过程 懒,占坑,以后再写 结局回收 没试,不知道,估计容易被打 完整代码 https://downl ...

最新文章

  1. haproxy keepalived_详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群
  2. VTK:Rendering之Cone4
  3. excel换行按什么键_电脑结束任务按什么键
  4. linux内核设计与实现 epub_Epoll学习服务器的简单实现-Linux内核Epoll结构
  5. php函数可变参数列表,PHP函数可变参数列表的具体实现方法介绍
  6. 微信公众平台开发教程第22篇-如何保证access_token长期有效
  7. mysql 1261 load data_mysql使用load data导入数据文件
  8. Linux之iptables(六、rich规则)
  9. 那些很重要,但是不常用的技术,websocket
  10. bzoj2437 [Noi2011]兔兔与蛋蛋
  11. JDK8与JDK11
  12. 有道词典 PC端 手机端 单词 背 个数 不同步 解决
  13. java微信下载word文件怎么打开方式_微信打不开word文档的解决方法 如何打开word文档...
  14. 北斗垂莽苍 开闭天门路(上)
  15. remains in conflict解决方法
  16. 致远互联发布A6+在打什么牌?
  17. vue 全屏背景图片 别看其他的了看我这篇就解决了!
  18. IO流实现写入规定的acci码值
  19. Cisco(62)——PBR策略路由案例
  20. Warning: Static member accessed via instance reference

热门文章

  1. MTK平台一个花屏重启问题的分析
  2. java毕业设计电影公司网Mybatis+系统+数据库+调试部署
  3. 行业生态重塑中,新氧如何逆风翻盘
  4. NX二次开发-创建图纸尺寸表达式抑制UF_DRF_add_controlling_exp
  5. 如何解决Myeclipse不能自动编译
  6. 网上流传的手机日入百元的方法
  7. 烤箱上prg_10个烤箱新鲜的jQuery插件
  8. chrome浏览器主页被劫持
  9. 汇编语言实验五-《汇编语言-王爽老师》
  10. 机器学习 第二节 第二课