zoukankan      html  css  js  c++  java
  • 字幕变色

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6260129.html   

      字幕变色使字幕平滑变色,使用CDC类提供的DrawText函数实现指定矩形范围内文字输出。文字变色是一个不断变化、自动进行的过程,因此需要用到定时器来自动控制文字变色进程,使不断调用DrawText函数,同时不断增大包含文本的矩形宽度。

           在OnCreate()函数中设置定时器: SetTimer(1,100,NULL);//设置定时   

          int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
          {
              if (CView::OnCreate(lpCreateStruct) == -1)
                  return -1;
          
              // TODO:  Add your specialized creation code here
              CClientDC dc(this);
              TEXTMETRIC tm;
              dc.GetTextMetrics(&tm);
             CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
             ShowCaret();
     
             SetTimer(1,100,NULL);//设置定时器
             return 0;
         } 

      在View类中添加OnTimer()函数和变量m_nWidth,具体实现代码如下:    

        void CTestView::OnTimer(UINT_PTR nIDEvent)
        {
            // TODO: Add your message handler code here and/or call default
            m_nWidth += 5;//用于改变包含文字的矩形宽度
        
            CClientDC dc(this);
            TEXTMETRIC tm;
            dc.GetTextMetrics(&tm);
            CRect rect;
            rect.left = 0;
            rect.top = 200;
            rect.right = m_nWidth;
            rect.bottom = rect.top + tm.tmHeight;
    
            dc.SetTextColor(RGB(255,0,0));
            CString str;
            str.LoadStringW(IDS_STRINGgiserDev);
            dc.DrawText(str,rect,DT_LEFT);
        
            CView::OnTimer(nIDEvent);
        }

      运行即可看到动态输出文字的效果。但是当我们把文字输出格式改为DT_RIGHT时会出错,而且我们还需要在文字输出之后改变颜色,当字符串全部输出完后还需要让其从头开始输出。为此需要判断限制显示范围的矩形宽度是否超过了该字符串在屏幕上显示时的宽度。

      代码如下:  

         //获取字符串显示时的宽度
            CSize sz = dc.GetTextExtent(str);
            if(m_nWidth > sz.cx) //判断
            {
                m_nWidth = 0;
                dc.SetTextColor(RGB(0,255,0));
                dc.TextOutW(0,200,str);
            }

      运行,可以看到显示效果如图示:

      此效果还有很多bug待解决…

      如果有疑问,可以联系giserdev@163.com,更多内容请参考:http://www.cnblogs.com/mxbs/,技术交流请加QQ群:586571286。

     

  • 相关阅读:
    wcf连接数据库用sqlhelper,连接数一直没有释放反而增加
    Assembly.GetManifestResourceStream为null
    webapi <Message>已拒绝为此请求授权。</Message>
    未找到与名为“xxx”的控制器匹配的类型。
    Eclipse Ctrl+鼠标左键不能查看源代码
    WEB API 用MemoryStream流做下载功能
    mysql繁字体报错,Incorrect string value: 'xE9_' for column 'UserName' at row 1
    学信网模拟登录2
    选择排序
    mysql学习笔记
  • 原文地址:https://www.cnblogs.com/mxbs/p/6260129.html
Copyright © 2011-2022 走看看