用C 品尝Vista美味[6]

2008-02-23 05:39:20来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


//决定使用哪一种字体
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 )
}

[1] [2] [3] [4] [5] [6] [7]




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 用C 品尝Vista美味[5]

下一篇: 用C 品尝Vista美味[7]

热门词条
热门标签