最近项目中要在标题栏添加自定义按钮,像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;即可
PS:关于微软的AERO机制还是要详细查问一下有关DWM的知识才能理解;
以上代码测试环境为VS2008SP1