用C 品尝Vista美味[6]
2008-02-23 05:39:20来源:互联网 阅读 ()
//决定使用哪一种字体 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]
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash