用C 品尝Vista美味[5]
2008-02-23 05:39:19来源:互联网 阅读 ()
else { const UINT uFormat = DT_SINGLELINE|DT_CENTER|DT_VCENTER|DT_NOPREFIX; //配置好DC dc.SetTextColor ( RGB(255,255,255) ); dc.SelectFont ( m_font ); dc.SetBkMode ( TRANSPARENT ); //绘制文本 dc.DrawText ( szTime, -1, rcText, uFormat ); } return true; //我们绘制了整个背景 } |
下面就是"合成文本"的模样:
为演示发光效果,下面是同一背景上的一段文本,但没有发光效果:
处理composition相关的通知
当DWM的composition状态打开或关闭时,系统会向任何顶层窗口广播一个WM_DWMCOMPOSITIONCHANGED消息;假如composition为打开,需要再次调用DwmExtendFrameIntoClientArea()以告之DWM,我们窗口的哪一部分应为毛玻璃效果:
LRESULT CMainFrame::OnCompositionChanged(...) { if ( IsCompositionEnabled() ) { MARGINS mar = {0}; mar.cyBottomHeight = 100; DwmExtendFrameIntoClientArea ( m_hWnd, &mar ); } return 0; } |
在对话框程式中应用毛玻璃效果
在对话框程式中添加毛玻璃效果的过程,和上面框架窗口的例子很相似,但需要对代码作一些轻微的改变。在示例对话框程式中为顶层窗口添加了毛玻璃效果,下面,相对前一例子作了修改或添加的代码,将以黑体字标出。
配置对话框
如之前相同,要告之CThemeImpl我们要使用哪个窗口类主题,并调用DwmExtendFrameIntoClientArea()为窗口边框添加毛玻璃效果。
CMainDlg::CMainDlg() { SetThemeClassList ( L"globals" ); } BOOL CMainDlg::OnInitDialog ( HWND hwndFocus, LPARAM lParam ) { //删除了向导生成的某些初始化代码 //为顶层窗口添加毛玻璃效果 if ( IsCompositionEnabled() ) { MARGINS mar = {0}; mar.cyTopHeight = 150; DwmExtendFrameIntoClientArea ( m_hWnd, &mar ); } |
接下来,构建文本字体。注意,我们需要显式调用OpenThemeData(),而为什么在前面的框架窗口例子中无需调用呢,因为CThemeImpl在他的WM_CREATE处理程式中已调用了。反观对话框取而代之接收WM_INITDIALOG,而CThemeImpl未处理WM_INITDIALOG,所以就需要我们自己调用OpenThemeData()了。另外,在代码中也把字体配置得更大,只是为了演示更大字体的发光效果。
[1] [2] [3] [4] [5] [6] [7]
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 用C 品尝Vista美味[3]
下一篇: 用C 品尝Vista美味[6]
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