用C++品尝Vista美味[6],第1张

用C++品尝Vista美味[6],第2张

//决定使用哪种字体
log font lf = { 0 };
OpenThemeData();

如果(!IsThemeNull())
GetThemeSysFont(TMT _ MSGBOXFONT,& lf);
else
{
nonclient metrics ncm = { sizeof(nonclient metrics)};
SystemParametersInfo(SPI _ GETNONCLIENTMETRICS,sizeof(NONCLIENTMETRICS),&ncm,false);
lf = ncm . lfmessagefont;
}

lf . lf height * = 3;
m_font。CreateFontIndirect(& lf);

对话框的顶部窗口有一个很大的静态文本控件,就是我们要画时间的地方。该代码设置控件的所有者描述样式,因此我们可以将所有文本绘制代码放在OnDrawItem()中:

//设置静态文本控件的所有者描述

m_wndTimeLabel。attach(GetDlgItem(IDC _ CLOCK));
m_wndTimeLabel。ModifyStyle ( SS_TYPEMASK,SS _ owner draw);

最后,调用EnableThemeDialogTexture(),以便用当前主题绘制对话框背景。

//其他初始化代码

EnableThemeDialogTexture(ETDT _ ENABLE);

//将定时器间隔设置为1秒,这样时钟可以每秒更新一次。

SetTimer(11000);
返回TRUE
}

开放式磨砂玻璃效果

像以前一样,我们需要用黑色笔刷填充磨砂玻璃区域,以创建透视效果。因为内置的对话框窗口处理过程会响应WM_ERASEBKGND消息来处理非矩形或者半透明的控件,所以我们需要在OnPaint()中画图,而不是OnEraseBkgnd()。

void CMainDlg::OnPaint(HDC HDC)
{
CPaintDC DC(m _ hWnd);
CRect rcGlassArea;

if(IsCompositionEnabled())
{
GetClientRect(rcGlassArea);
rcglassarea . bottom = 150;
dc。FillSolidRect(rcGlassArea,RGB(0,0,0));
}
}

绘制文本

在OnTimer()中,获取当前时间并使用它来设置静态控件的文本:

Voidcmaindlg:: ontimer (uinuid,timer proc proroc)
{
//获取当前时间
TCHAR SZ time[64];
gettime format(LOCALE _ USER _ DEFAULT,0,NULL,NULL,szTime,_ count of(SZ time));
m_wndTimeLabel。SetWindowText(SZ time)
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用C++品尝Vista美味[6]

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情