备忘

来源:互联网 发布:九次方大数据副总工资 编辑:程序博客网 时间:2024/04/29 21:36

 frost_sullivan是个电信专家,他关注人工智能、网络、电信



VC 关闭应用程序标题栏AERO效果(关闭透明化效果)

最近项目中要在标题栏添加自定义按钮,像QQ聊天窗口中“窗口设置”那个按钮一样,查阅了大量资料,使用网上现成NCBUTTON类,在不开启AERO效果情况下比较理想,但是一开启AERO就看不到按钮了,故又要想法关闭应用程序的AERO;

因为不可能要求用户把整个WIN7系统的都关闭了,所以只能编程实现关闭本程序的既可;

方法如下:

一,对于没有使用功能区的(CMFCRIBBONBAR)的界面,可以直接使用以下API进行完成;

  BOOL bDwm ;
  DwmIsCompositionEnabled(&bDwm);        //判断系统是否开启了AERO效果
  if (bDwm)
  {
   DWMNCRENDERINGPOLICY ncrp = DWMNCRP_DISABLED;
   DwmSetWindowAttribute(this->m_hWnd, DWMWA_NCRENDERING_POLICY, &ncrp, sizeof(ncrp));//禁用程序的AERO效果;
  }

 

需要引入头文件和LIB库

#include <dwmapi.h>
#pragma comment(lib, "dwmapi.lib")

以上方法,在DIALOG和非功能区项目中都达到我效果,但是在使得了CMFCRIBBONBAR时,标题栏就像被重绘了,变的很乱和不稳定,于是又找到下面的第二种方法;

 

二,在RIBBONBAR创建前添加

afxGlobalData.bDisableAero = TRUE;即可

参考文章:http://social.msdn.microsoft.com/Forums/vstudio/zh-CN/1526222f-6893-40f2-8332-b1a7738726f5/mfc-application-block-aero-peek-caption

 

 

 

PS:关于微软的AERO机制还是要详细查问一下有关DWM的知识才能理解;

以上代码测试环境为VS2008SP1


原创粉丝点击