预览
新建工程
新建一个MFC工程,普通的Dialog程序
添加必要的函数库
#include <dwmapi.h>
#pragma comment (lib, "dwmapi.lib")
#pragma comment (lib, "UxTheme.lib")
在窗口初始函数中添加
BOOL CMy2AeroDlg::OnInitDialog()
{
CDialog::OnInitDialog();
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if(osvi.dwMajorVersion >= 6)
{
MARGINS m = {-1};
DwmExtendFrameIntoClientArea(m_hWnd, &m);
}
}
在OnPaint()
中最后加入,记住,是加入:
CRect rect;
GetClientRect(&rect);
CBrush brush(RGB(0,0,0));
GetDC()->FillRect(&rect,&brush);
DTTOPTS dto = { sizeof(DTTOPTS) };
dto.dwFlags = DTT_COMPOSITED | DTT_GLOWSIZE;
dto.iGlowSize = 20;
HTHEME htheme = OpenThemeData(m_hWnd,L"globals");
if(htheme==NULL) return;
这样就可以看到一个Aero的程序了.
事例
下面是一个事例
BOOL CMy2AeroDlg::OnInitDialog()
{
CDialog::OnInitDialog();
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if(osvi.dwMajorVersion >= 6)
{
MARGINS m = {-1};
DwmExtendFrameIntoClientArea(m_hWnd, &m);
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
LOGFONT lf={0};
GetFont()->GetLogFont(&lf);
lf.lfHeight*=4;
m_font.CreateFontIndirect(&lf);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMy2AeroDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
CRect rect;
GetClientRect(&rect);
CBrush brush(RGB(0,0,0));
GetDC()->FillRect(&rect,&brush);
DTTOPTS dto = { sizeof(DTTOPTS) };
dto.dwFlags = DTT_COMPOSITED | DTT_GLOWSIZE;
dto.iGlowSize = 20;
HTHEME htheme = OpenThemeData(m_hWnd,L"globals");
if(htheme==NULL) return;
OSVERSIONINFO osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if(osvi.dwMajorVersion < 6)
return;
CWindowDC dc(this);
CRect rt;
GetWindowRect(&rt);
CFont* pOldFont=dc.SelectObject(&m_font);
DrawThemeTextEx (htheme,
dc.m_hDC,
TEXT_CONTROLLABEL,
0,
L"MFC is great with Aero",
-1,
DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_NOPREFIX,
CRect(rect.left,rect.bottom-100,rect.right,rect.bottom-30),
&dto );
dc.SelectObject(pOldFont);
}
里面的m_font
是个全局
的CFont变量