您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  用C++品尝Vista美味[5] 【注册男护士专用博客】          

用C++品尝Vista美味[5]

www.nanhushi.com     佚名   不详 

  如果composition未打开,我们用GDI函数绘制文本:

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()了。另外,在代码中也把字体设置得更大,只是为了演示更大字体的发光效果。 

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目