视频上显示字幕问题

wlpresario 2012-11-21 09:46:21
需要在视频上显示字幕,采用的是使用透明的popup窗口覆盖在视频播放窗口上。播放窗体是一个ocx嵌入在ie中,ocx是一个窗口布局集合,有36个窗口,可以按多种方式组合窗口的。目前是在这个ocx基础上开发,创建透明的popup窗口覆盖在播放的窗体上。有个问题请大家看看:
创建popup透明窗体的时候,设置了ie为它的父窗口,代码如下
//现获取ocx播放窗口的屏幕坐标
CRect temp;
::GetWindowRect(this->GetSafeHwnd(), &temp);
//***ScreenToClient(&temp);
//创建窗口
m_pCoverDlg = new CCoverDlg;
m_pCoverDlg->Create(IDD_DIALOG_COVER);
m_pCoverDlg->ShowWindow(SW_SHOW);
//设置父窗口,虽然传的是ocx的播放窗口,但是大家懂的
m_pCoverDlg->SetParent(this);
//移动窗体到ocx的播放窗口的位置上
m_pCoverDlg->MoveWindow(&temp);

这时候问题来了,新建的popup的窗口的大小并不是获取的temp的大小。
如果//***ScreenToClient(&temp);这句加上就是获取相对客户区的坐标就是屏幕左上角(0,0,width,height)的话,窗口就可以在左上角正常大小显示
...全文
315 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlpresario 2012-11-23
  • 打赏
  • 举报
回复
情况比较复杂,我前面可能没有描述清楚。 目前有一个ocx,功能是提供了30多个dlg,通过使用这个对话框来播放视频。 现在需要在视频上添加字幕,现在使用在这个ocx控件中,再创建一个透明窗口,在这个透明窗口上面添加字幕信息然后覆盖到每个播放的dlg上面。 有几个问题,麻烦大家看看,有谁这么做的,或者有更好的方法麻烦给个详细的思路。 1.透明窗口的创建代码贴出来了,这个popup类型窗口设置的父窗口只能是嵌入ocx的ie页面,在创建后需要movewindow到ie中ocx控件的dlg窗口上(字体是写在背景上的就是onerasebkbng(...)函数中的),这时候问题来了,如果直接create然后SetParent再movewindow到获取的dlg的rect的时候,字体无法出现(就算是人为触发WM_ONERASEBKBNG消息,字体也无法显示)。但是如果先movewindow到左上角,然后再movewindow到ocx控件中的dlg的rect位置就可以显示,我在2中情况下使用spy++看过窗体的客户区以及screen的区间,在2种情况下区间是一样的。这个问题虽然可以通过其他方式绕过,但是由于初次搞这个界面想把原因搞清楚,请大家帮忙看看 2.就是现在字幕显示以及覆盖都做完了,在dlg上出现字幕,当没有视频播放时都是正常的,但是在播放时,某些播放视频情况下覆盖窗体的字幕会不停的闪动(好像高清的不闪)。可能是何种原因,请大家帮忙分析下提供些解决方法
快乐鹦鹉 2012-11-21
  • 打赏
  • 举报
回复
没怎么看懂 新建的popup的窗口的大小并不是获取的temp的大小 --大小不会有问题吧,最多也就是位置不对吧? 如果//***ScreenToClient(&temp);这句加上就是获取相对客户区的坐标就是屏幕左上角(0,0,width,height)的话,窗口就可以在左上角正常大小显示 --到底是相对于显示器的左上角,还是你这个视频窗口的左上角?
若风09 2012-11-21
  • 打赏
  • 举报
回复
我是来学习的
lgstudyvc 2012-11-21
  • 打赏
  • 举报
回复
有36个窗口? 一般厂家的sdk有字符叠加 接口,自己透明不是那回事
shen_wei 2012-11-21
  • 打赏
  • 举报
回复
先响应onSize函数。。。
sumos 2012-11-21
  • 打赏
  • 举报
回复
GetWindowRect这个函数,在主窗口的OnInitDialog中获取时是不行的。因为窗口此时位置并不确定。 你可以用GetClientRect和ClientToScreen做到。 弹出窗口的位置用MoveWindow就ok了。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧