用C 品尝Vista美味[6]

文章作者 100test 发表时间 2007:08:06 12:58:09
来源 100Test.Com百考试题网


//决定使用哪一种字体
LOGFONT lf = {0}.
OpenThemeData().

if ( !IsThemeNull() )
 GetThemeSysFont ( TMT_MSGBOXFONT, &.lf ).
else
{
 NONCLIENTMETRICS ncm = { sizeof(NONCLIENTMETRICS) }.
 SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),&.ncm, false ).
 lf = ncm.lfMessageFont.
}

lf.lfHeight *= 3.
m_font.CreateFontIndirect ( &.lf ).

  对话框的顶层窗口上有一个大的静态文本控件,也就是我们要绘制时间的地方。代码设置了控件的owner-draw风格,因此,我们可把所有的文本绘制代码都放在OnDrawItem()中:

//设置静态文本控件的owner-draw

m_wndTimeLabel.Attach ( GetDlgItem(IDC_CLOCK) ).
m_wndTimeLabel.ModifyStyle ( SS_TYPEMASK, SS_OWNERDRAW ).

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

//其他初始化代码

EnableThemeDialogTexture ( ETDT_ENABLE ).

//设置计时器的时间间隔为1秒,以在每个秒钟内都能更新时钟

SetTimer ( 1, 1000 ).
return 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()中,获取当前时间,并以此设置静态控件的文本:

void CMainDlg::OnTimer ( UINT uID, TIMERPROC pProc )
{
 //获取当前时间
 TCHAR szTime[64].
 GetTimeFormat ( LOCALE_USER_DEFAULT, 0, NULL, NULL,szTime, _countof(szTime) ).
 m_wndTimeLabel.SetWindowText ( szTime )
}

src="/ncre2/js/wxgg.js">

相关文章


用C 品尝Vista美味[4]
用C 品尝Vista美味[3]
用C 品尝Vista美味[6]
用C 品尝Vista美味[2]
用C 品尝Vista美味[1]
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛