双缓冲显示字幕(卡拉ok字幕)
思路:
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字幕)相关推荐
- Symbian中卡拉OK字幕实现
Symbian中卡拉OK字幕实现 <script type="text/javascript"> document.body.oncopy = function() { ...
- 制作卡拉OK字幕KSC文件
制作卡拉OK字幕KSC文件 1.制作歌词脚本文件 在进行歌曲卡拉OK字幕制作工作之前,我们先用文本编辑软件,如记事本程序将歌曲的歌词文件编辑好,行与行之间不要留空行 ...
- 小灰熊卡拉OK字幕使用教程
1.1 什么是KBuilder3.5 KBuilder 是"小灰熊卡拉OK字幕设计工具"的主程序,通过视频非线性编辑软件 Adobe Premiere.Sony Vegas 等将其 ...
- 小灰熊卡拉OK字幕设计工具KBuilder 3.5 使用说明
小灰熊卡拉OK字幕设计工具KBuilder 3.5 使用说明 导读: 一.什么是 KBuilder 二. KBuilder3.5 的新功能 三. KBuilder3.5 的安装 四.卡拉OK歌词脚 ...
- MFC开发——卡拉OK字幕制作
依然是为了赶老师作业,又去学了点东西,然后做了个小项目.首先在开始做项目之前,说一下整体思路,要实现卡拉OK字幕效果,就要对文本类与定时器有一定的掌握,通过定时器的更新,可以实现字体颜色的变化,与字幕 ...
- 卡拉ok歌词html,怎样制作卡拉ok字幕,如何亲手制作专业卡拉ok视频|卡拉ok字幕制作软件...
如何亲手制作专业卡拉ok字幕视频,是今天的主题.卡拉OK和MTV一样,同样是种歌词字幕效果.不同在于,MTV是逐行显示的,而卡拉OK和我们在KTV看到的MV的歌词字幕一样,是逐字显示的.然后卡拉OK的 ...
- 用小灰熊做卡拉OK字幕
发表时间:2007-1-31 阅读次数:662 1.制作歌词脚本文件 在进行歌曲卡拉OK字幕制作工作之前,我们先用文本编辑软件,如记事本程序将<会有那么一天>歌曲的歌词文件编辑好 ...
- VC实现卡拉OK字幕叠加
一. GDI编程基础 字幕叠加,应当是属于图形.图像处理的范畴.在Windows平台上,图形.图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口).GDI是 ...
- 解决Chrome无法显示本地的.vtt字幕文件 (如何让本地HTML运行在Server上)
解决Chrome无法显示本地的.vtt字幕文件 问题描述 解决方法 问题描述 在使用 Chrome 打开本地的html后,播放html中内嵌的视频时,不显示加载的 .vtt 文件字幕 解决方法 需要把 ...
最新文章
- 【数论基础】有关素数的基础算法(内含三种筛法,低至O(N^(2/3))!)
- 微信小程序电商实战-商品列表流式布局
- textfield获取其中内容_天涯明月刀天下镖镖旗数量 天下镖内容介绍
- 计算机视觉与深度学习 | 相机抖动的情况下的前景目标提取(消抖)
- Tomcat——设置管理员的用户名和密码
- leetcode 589. N 叉树的前序遍历,590. N 叉树的后序遍历(Java版)
- 我的log4j与logback简易配置
- Binary Search二分法搜索C++程序
- C++ 类成员引用变量的使用
- 华为做raid5步骤_华为RH2288V5服务器做RAID 0(官方推荐做法)
- 苹果6系统怎么更新不了_苹果App Store登录不了怎么办_登录不了App Store的解决办法?...
- 盘点:12个超炫数据可视化工具
- Python实现双色球号码随机生成
- Python实现视频中的音频提取
- 数学建模国赛编程手必备工具
- 国防科技论坛,一个不错的技术资料分享网站
- 【OpenCV】马赛克算法
- opengl处理图片翻转
- Java开发面试常见的技术问题整理
- 工作八年,分享整合初中高级Java面试题合集附答案(2020年最新版)
热门文章
- 使用Python操作压缩文件
- 5.金蝶KIS旗舰版从销售订单下推销售出库单使用说明,金蝶盘点机PDA仓库条码管理
- tkinter滚动事件详解
- Password-Based Key Derivation Functions (PBKDF)
- R数据可视化第三弹---ggplot2和REmap包绘制地图
- 零障碍合并两个模型,大型ResNet模型线性连接只需几秒,神经网络启发性新研究...
- 微信小程序 仿美团城市选择 城市切换
- CSS3实现图片在DIV中上下左右居中
- wenet实战系列-双声道音频语音识别
- 【Python例】利用 python 进行图片文字信息的提取 --- OCR-EasyOCR