思路:

1.设置定时器SetTime,在Ontime()里面确定显示矩形的大小,让后用DrawText把字铁道矩形上面;

2.

int nTextHei = dc.GetTextExtent( m_strText ).cy; // length of horizontal label文字的高度
int nTextWei = dc.GetTextExtent( m_strText ).cx; // length of horizontal label文字的宽度

获取文字高度和宽度。

3.设置矩形的大小

矩形的宽度可以每次都加1;

void CShowFontView::OnTimer(UINT nIDEvent)
{CClientDC dc(this);CFont font;CRect rt;GetClientRect( &rt );TEXTMETRIC tm;dc.GetTextMetrics(&tm);static int nindex = 0;m_nWithRect += 1;if( !nindex )m_strText = GetGeci( nindex );int nTextHei = dc.GetTextExtent( m_strText ).cy; // length of horizontal label文字的高度int nTextWei = dc.GetTextExtent( m_strText ).cx; // length of horizontal label文字的宽度RectShow.SetRect( 300 , 300 , 300+nTextWei+20 , 300+ nTextHei );if( m_nWithRect > nTextWei ){m_nWithRect = 10;nindex ++;m_strText = GetGeci( nindex );Sleep(1000);        }rectRetangle.SetRect( nTextWei +20 - m_nWithRect , 30 , nTextWei +20 , 30+nTextHei );rectColor.SetRect( 300 , 300 , 300+m_nWithRect , 300+nTextHei );Sleep(30);DrawText( m_strText );CView::OnTimer(nIDEvent);
}

然后呢就把字贴出来;怎样贴呢就根据需求;

void CShowFontView::DrawText( CString strText )
{if( strText.IsEmpty() ){return;}static int ncout = 0;CClientDC dc( this );CRect rtclient;GetClientRect( &rtclient );CBitmap MemBitmap;CDC MemDC; //首先定义一个显示设备对象MemDC.CreateCompatibleDC( &dc );MemBitmap.CreateCompatibleBitmap( &dc , rtclient.Width() , rtclient.Height() );MemDC.SelectObject( &MemBitmap );MemDC.FillSolidRect( 0  ,0 , rtclient.Width() , rtclient.Height() , RGB( 199 , 237 , 208));MemDC.SetTextColor( RGB( 255 , 0 , 0));MemDC.DrawText( strText , &rectRetangle , DT_LEFT );//字幕向左滚动;MemDC.SetTextColor( RGB( 0 , 0 , 0 ) );//先把这段歌词全部显示MemDC.DrawText( strText , &RectShow , DT_LEFT );MemDC.SetTextColor( RGB( 0, 0 , 255 ));//在把要变色的再显示一遍;MemDC.DrawText( strText , &rectColor , DT_LEFT );dc.BitBlt( 0 , 0 , rtclient.Width() , rtclient.Height() , &MemDC , 0, 0 , SRCCOPY );MemBitmap.DeleteObject();MemDC.DeleteDC();    ncout ++;}
int CShowFontView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{if (CView::OnCreate(lpCreateStruct) == -1)return -1;readGeci();SetTimer( 0 , 3 ,0 );return 0;
}BOOL CShowFontView::OnEraseBkgnd(CDC* pDC)
{return CView::OnEraseBkgnd(pDC);
}
void CShowFontView::readGeci()
{CStdioFile dlg;if(    dlg.Open("res\\text.txt" , CFile::modeRead ) ){CString strText;while ( dlg.ReadString( strText )){m_ListCtring.AddHead( strText );}dlg.Close();}
}
CString CShowFontView::GetGeci( int nindex )
{CString strText;if( nindex < m_ListCtring.GetCount()&& m_ListCtring.GetCount()>0 )strText = m_ListCtring.GetAt( m_ListCtring.FindIndex( m_ListCtring.GetCount() -nindex -1  ));elseKillTimer(0);return strText;
}

转载于:https://www.cnblogs.com/chenzuoyou/p/3361654.html

双缓冲显示字幕(卡拉ok字幕)相关推荐

  1. Symbian中卡拉OK字幕实现

    Symbian中卡拉OK字幕实现 <script type="text/javascript"> document.body.oncopy = function() { ...

  2. 制作卡拉OK字幕KSC文件

    制作卡拉OK字幕KSC文件          1.制作歌词脚本文件          在进行歌曲卡拉OK字幕制作工作之前,我们先用文本编辑软件,如记事本程序将歌曲的歌词文件编辑好,行与行之间不要留空行 ...

  3. 小灰熊卡拉OK字幕使用教程

    1.1 什么是KBuilder3.5 KBuilder 是"小灰熊卡拉OK字幕设计工具"的主程序,通过视频非线性编辑软件 Adobe Premiere.Sony Vegas 等将其 ...

  4. 小灰熊卡拉OK字幕设计工具KBuilder 3.5 使用说明

    小灰熊卡拉OK字幕设计工具KBuilder 3.5 使用说明   导读: 一.什么是 KBuilder 二. KBuilder3.5 的新功能 三. KBuilder3.5 的安装 四.卡拉OK歌词脚 ...

  5. MFC开发——卡拉OK字幕制作

    依然是为了赶老师作业,又去学了点东西,然后做了个小项目.首先在开始做项目之前,说一下整体思路,要实现卡拉OK字幕效果,就要对文本类与定时器有一定的掌握,通过定时器的更新,可以实现字体颜色的变化,与字幕 ...

  6. 卡拉ok歌词html,怎样制作卡拉ok字幕,如何亲手制作专业卡拉ok视频|卡拉ok字幕制作软件...

    如何亲手制作专业卡拉ok字幕视频,是今天的主题.卡拉OK和MTV一样,同样是种歌词字幕效果.不同在于,MTV是逐行显示的,而卡拉OK和我们在KTV看到的MV的歌词字幕一样,是逐字显示的.然后卡拉OK的 ...

  7. 用小灰熊做卡拉OK字幕

      发表时间:2007-1-31    阅读次数:662 1.制作歌词脚本文件 在进行歌曲卡拉OK字幕制作工作之前,我们先用文本编辑软件,如记事本程序将<会有那么一天>歌曲的歌词文件编辑好 ...

  8. VC实现卡拉OK字幕叠加

    一. GDI编程基础 字幕叠加,应当是属于图形.图像处理的范畴.在Windows平台上,图形.图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口).GDI是 ...

  9. 解决Chrome无法显示本地的.vtt字幕文件 (如何让本地HTML运行在Server上)

    解决Chrome无法显示本地的.vtt字幕文件 问题描述 解决方法 问题描述 在使用 Chrome 打开本地的html后,播放html中内嵌的视频时,不显示加载的 .vtt 文件字幕 解决方法 需要把 ...

最新文章

  1. 【数论基础】有关素数的基础算法(内含三种筛法,低至O(N^(2/3))!)
  2. 微信小程序电商实战-商品列表流式布局
  3. textfield获取其中内容_天涯明月刀天下镖镖旗数量 天下镖内容介绍
  4. 计算机视觉与深度学习 | 相机抖动的情况下的前景目标提取(消抖)
  5. Tomcat——设置管理员的用户名和密码
  6. leetcode 589. N 叉树的前序遍历,590. N 叉树的后序遍历(Java版)
  7. 我的log4j与logback简易配置
  8. Binary Search二分法搜索C++程序
  9. C++ 类成员引用变量的使用
  10. 华为做raid5步骤_华为RH2288V5服务器做RAID 0(官方推荐做法)
  11. 苹果6系统怎么更新不了_苹果App Store登录不了怎么办_登录不了App Store的解决办法?...
  12. 盘点:12个超炫数据可视化工具
  13. Python实现双色球号码随机生成
  14. Python实现视频中的音频提取
  15. 数学建模国赛编程手必备工具
  16. 国防科技论坛,一个不错的技术资料分享网站
  17. 【OpenCV】马赛克算法
  18. opengl处理图片翻转
  19. Java开发面试常见的技术问题整理
  20. 工作八年,分享整合初中高级Java面试题合集附答案(2020年最新版)

热门文章

  1. 使用Python操作压缩文件
  2. 5.金蝶KIS旗舰版从销售订单下推销售出库单使用说明,金蝶盘点机PDA仓库条码管理
  3. tkinter滚动事件详解
  4. Password-Based Key Derivation Functions (PBKDF)
  5. R数据可视化第三弹---ggplot2和REmap包绘制地图
  6. 零障碍合并两个模型,大型ResNet模型线性连接只需几秒,神经网络启发性新研究...
  7. 微信小程序 仿美团城市选择 城市切换
  8. CSS3实现图片在DIV中上下左右居中
  9. wenet实战系列-双声道音频语音识别
  10. 【Python例】利用 python 进行图片文字信息的提取 --- OCR-EasyOCR