文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络程序开发C/C++用C++品尝Vista美味:界面的毛玻璃效果
精品推荐
特别推荐
·C语言编程常见问题解答之常用函数的包含文件(1)
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
热点TOP10
·C语言的常用库函数使用方法分析及用途
·C语言图形处理
·水滴石穿C语言之指针综合谈
·C语言编程常见问题解答之常用函数的包含文件(1)
·Windows下C语言网络编程快速入门
·进程调度模拟程序
·Visual C++ 入门精解
·C语言编程易犯毛病集合
·socket编程原理
·C语言编程常见问题解答(目录)

用C++品尝Vista美味:界面的毛玻璃效果

日期:2007年12月29日 作者: 查看:[大字体 中字体 小字体]


} // end if (IsCompositionEnabled())
  如果composition未打开,我们用GDI函数绘制文本:

else
{
 const UINT uFormat = DT_SINGLELINEDT_CENTERDT_VCENTERDT_NOPREFIX;
 //设置好DC

 dc.SetTextColor ( RGB(255,255,255) );
 dc.SelectFont ( m_font );
 dc.SetBkMode ( TRANSPARENT );

 //绘制文本

 dc.DrawText ( szTime, -1, rcText, uFormat );
}
return true; //我们绘制了整个背景
}
  下面就是"合成文本"的模样:

用C++品尝Vista美味:界面的毛玻璃效果(图六)

  为演示发光效果,下面是同一背景上的一段文本,但没有发光效果:

用C++品尝Vista美味:界面的毛玻璃效果(图七)
处理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()了。另外,在代码中也把字体设置得更大,只是为了演示更大字体的发光效果。

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

上一页 [1] [2] [3] [4] [5] 下一页 




上一篇:对一个问题的突破!

下一篇:一个模拟lc 的数字显示控制台程序
相关文章:
·Windows Vista震撼1600X1200高清壁纸
·vista分区软件
·美女诱惑! Vista在日本是这样促销的
·Windows Vista Ultimate中文旗舰版下载+简单破解(支持迅雷HTTP & BT)
·Vista中硬盘分区合并分割全攻略
·Windows Vista 正式版 6000 高比破解修正版[可升级]
·最全面的WindowsXP修改大全
·传Vista遭完全破解 短期内或拉动PC“攒机”销量
·Windows Vista 简体中文版最终价格公布
·Windows vista 标准1024X768精美壁纸
相关软件:

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot