Aero for WTL application

初用WTL,发现搜不到Aero效果的WTL文章,那我就用WTL练一下手,我详细讲一下步骤。

 XXXDlg.h文件:(.cpp会编译报错,所以全部消息映射实现在.h)

头文件:

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

1.添加Aero状态的成员

private:
BOOL m_bAeroEnabled;

2.初始化窗体时判断Aero

        ::DwmIsCompositionEnabled(&m_bAeroEnabled);
PostMessage(WM_DWMCOMPOSITIONCHANGED);
SetTimer(11,1000,NULL); // current time display

3.Aero变更通知处理

LRESULT OnCompositionChnaged(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
::DwmIsCompositionEnabled(&m_bAeroEnabled);
if (m_bAeroEnabled) {
MARGINS m = {-1,-1,-1,-1};
::DwmExtendFrameIntoClientArea(m_hWnd,&m);
Invalidate(); // draw black background

}
return 0;
}

在初始化窗体时,直接Post WM_DWMCOMPOSITIONCHANGED消息,让这个消息处理函数搞定,以后系统在Aero状态改变时也会给窗体发送这个消息。

消息映射:

MESSAGE_HANDLER(WM_DWMCOMPOSITIONCHANGED, OnCompositionChnaged)

另外,需要考虑OnCtlDlg消息映射函数在Aero状态下返回默认刷子还是黑刷,这个太简单,省略。

  WTL跟MFC差不多,但是明显感觉比MFC好用,但是与IDE的兼容性不如MFC,有时候可能出现奇怪的问题。源码附上:

其中GlowingText.dll是我封装的Aero下发光文字绘制,源码有示例。

源码:

 https://files.cnblogs.com/asight/AeroForWTL.zip

dll:

https://files.cnblogs.com/asight/GlowingText.zip




 

原文地址:https://www.cnblogs.com/asight/p/2252871.html