字幕变色

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

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

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

 1 int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
 2 {
 3     if (CView::OnCreate(lpCreateStruct) == -1)
 4         return -1;
 5
 6     // TODO:  Add your specialized creation code here
 7     CClientDC dc(this);
 8     TEXTMETRIC tm;
 9     dc.GetTextMetrics(&tm);
10     CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
11     ShowCaret();
12
13     SetTimer(1,100,NULL);//设置定时器
14     return 0;
15 } 

  在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待解决…

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

时间: 2024-10-12 21:28:16

字幕变色的相关文章

字体设置

1.MFC提供了CFont类专门用来设置字体,包括:CreateFont/CreateFontIndirect/CreatePointFont/CreatePointFontIndirect 例: CFont font; font.CreatePointFont(300,"黑体",NULL); CFont *pOldFont=dc.SelectObject(&font); ... dc.SelectObject(pOldFont); 若要实现功能完整的字处理程序,需利用MFC提

5_文本编程

1.插入符(Caret): (1) 文本插入符 函数的原型声明:(CWnd类) void CreateSolidCaret ( int Nwidth, int nHeight ); ·nwidth:指定插入符的宽度(逻辑单位).参数值为0,则系统将其设置为系统定义的窗口边界的宽度. ·nHeight:(同理)...高度. `默认是隐藏的,需调用 Showcatet(); 来显示: 插入符的创建应该在窗口创建之后进行,可以在WM_CREATE消息的响应函数OnCreate中(在创建窗口的代码之后)

[2001-2003美/新等合拍经典奇幻大片][魔戒1-3][BD-RMVB][中英字幕/1280x720高清晰版]

新西兰, 指环王, 英语, 美国, 大片 ◎译 名 魔戒首部曲:魔戒现身/指环王:护戒使者/指环王:友谊之戒◎片 名 The Lord Of The Rings The Fellowship Of The Ring◎年 代 2001◎国 家 新西兰/美国◎类 别 动作/冒险/幻想◎语 言 英语◎字 幕 中英双字◎IMDB评分 8.8/10  368,289 votes Top 250: #18 ◎文件格式 X264 + AC3◎视频尺寸 1024 x 576/1280 x 720◎文件大小 1C

多媒体开发(6):滤镜实现各种图片效果 | Video-Filters | 变色

之前讲过使用FFmpeg的drawtext滤镜(把图片或文字加到视频上),而实际上,FFmpeg的滤镜很强大,远不止加字幕或加图片的功能.滤镜是很有趣的,可以把图片变模糊.变色.缩放旋转,等等. 本文介绍FFmpeg滤镜的使用.目的是让读者感受一下FFmepg的滤镜效果,这样在实际需要某种效果时,可以考虑使用FFmpeg. 小程这里直接使用FFmpeg的命令行来使用滤镜,不涉及写代码调用FFmpeg的内容,并且这里都是对图片进行滤镜处理,读者会看到很多有趣的处理效果. 但是,由于FFmpeg滤镜

java 图片压缩变色问题

java图片压缩,有时由于图片自身的原因,如透明的PNG图.改alpha通道或四色图等. 压缩完了,会出现图片变色的情况. 如: 原图 压缩完: 尝试了很多方法,如JDK原生的方式及第三方组件java-image-scaling或thumbnailator都不解决问题. 后来采用阿里的SimpleImage解决.记录一下 SimpleImage github地址:https://github.com/alibaba/simpleimage依赖jar:commons-io-2.4.jarcommo

Android实现按钮点击效果(第一次点击变色,第二次恢复)

1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="点击变色" android:background="@drawable/btn_st" android:gravity="center&

js图片轮播与索引变色

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

html基础-移动字幕效果-from表单(5)

今天接着继续来,为大家准备了移动字幕效果和form表单,这么多天挺无聊的我为大家准备了点好玩的移动字幕效果. 一.移动字幕效果 <marquee direction="up(方向)" behavior="scroll(滚动方式)" scrolldelay="1000(滚动延迟)"></marquee>         direction(滚动方向)属性:down=下 up=上 left=左 right=右         

用angular实现隔行变色

在写隔行变色时应该知道的几个指令.ng-app :angular入口,ng-repeat:控制重复,ng-cloak:防止闪烁,用法就是给一个class="ng-cloak",在样式表中写好 .ng-cloak{display:none}angular会在解析完代码时清除ng-cloak.还有另外一个防止闪烁的指令只ng-bind.当它作为标签属性时是不会显示出来的比如 <p ng-bind="msg"></p> 这个msg就不会出现闪烁.