初用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