用C 品尝Vista美味[3]
2008-02-23 05:39:19来源:互联网 阅读 ()
底部的100像素现在是毛玻璃效果了。
在毛玻璃区域添加文本
在窗口中添加毛玻璃效果是比较简单的部分,但要把自己的界面元素(UI)添加到毛玻璃之上,就有点难度了。因为必须一直保持像素的alpha值,所以就要用到那些能够理解并适当配置alpha的绘图API。坏消息是,GDI函数差不多全部不理会alpha--唯一剩下的API则为带有SRCCOPY光栅操作的BilBlt()函数了,因此,程式必须使用GDI 或主题API来进行绘图,这些API都是时刻不忘alpha的。
在Vista中,有关毛玻璃的效果一般用在表示程式状态的区域(取代了通用控件中的状态栏),例如,Windows Media Player 11就在窗口底部的毛玻璃区域显示播放控制和当前歌曲信息:
以下,将演示怎样在毛玻璃区域上绘制文本,并怎样在文本上添加发光效果,以便文本在任何背景上都方便阅读。
使用正确的字体
Vista已完全放弃使用MS Sans Serif和Tahoma字体,转而把Segoe UI作为默认的UI字体。我们的程式也应该使用Segoe UI字体,所以,将会在基于当前主题的情况下创建一个字体。假如主题被禁用(如用户正在使用Windows经典颜色方案),那我们就使用SystemParametersInfo() API。
首先,需要在CMainFrame中添加主题支持,这一点很简单,因为WTL已有一个用于处理主题的类:CThemeImpl。我们可把CThemeImpl添加到继承列表,并把消息链接至CThemeImpl,以便在当前主题改变时,程式能够得到相应的通知。
class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CMessageFilter, public CThemeImpl<CMainFrame> { // ... BEGIN_MSG_MAP(CMainFrame) CHAIN_MSG_MAP(CThemeImpl<CMainFrame>) // ... END_MSG_MAP() protected: CFont m_font; //用于绘制文本的字体 }; |
在CMainFrame的构造函数中,我们调用了CThemeImpl::SetThemeClassList(),其指定了我们正在使用哪一个主题的窗口类。对一般窗口来说(即不是普通控件的窗口),名称为"globals"。
CMainFrame::CMainFrame() { SetThemeClassList ( L"globals" ); } |
最后,在OnCreate()中,从主题中读取字体信息,并创建一个字体自用:
LRESULT CMainFrame::OnCreate ( LPCREATESTRUCT lpcs ) { // ... //决定在文本中使用哪一种字体 LOGFONT lf = {0}; if ( !IsThemeNull() ) GetThemeSysFont ( TMT_MSGBOXFONT, &lf ); else { NONCLIENTMETRICS ncm = { sizeof(NONCLIENTMETRICS) }; SystemParametersInfo (SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),&ncm, false ); lf = ncm.lfMessageFont; } m_font.CreateFontIndirect ( &lf ); return 0; } |
[1] [2] [3] [4] [5] [6] [7]
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 用C 品尝Vista美味[1]
下一篇: 用C 品尝Vista美味[5]
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