滚动条控制视频播放问题解决方案

来源:互联网 发布:正规赌球软件 编辑:程序博客网 时间:2024/04/30 15:21

最近在编写视频播放相关的程序,在为视频播放器添加一个滚动条时出现了很多问题,滚动条实现的功能是:随着视频的播放滚动条移动显示进度;滚动条可以随意拖动以调整视频播放到感兴趣的地方,即可以快进后退。

之前我的做法是为滚动条添加一个事件处理程序,同时在定时器中不断更新滚动条位置,但是问题是视频出现跳跃重复现象,后来发现程序响应了滑动条OnNMCustomdrawProgress消息,并在此消息中又调整了视频播放的位置,因此会出现播放反复现象。同时问题是这个消息响应函数在滚动条变化时不断的调用,这样就达不到我要的点击的时候就调用的目的。

 

解决办法是

1、在OnNMReleasedcaptureProgress而不是OnNMCustomdrawProgress中响应进度条拖动消息。

2、在定时器中定时更新进度条位置。

3、同时重写PreTranslateMessage消息,在进度条被选中且鼠标左键按下的消息中,killtimer,然后再在鼠标左键弹起的消息响应中,settimer

 

前两条都好解决,第三条解决办法如下:(以下部分为转载)

 

响应对某个控件的鼠标左键按下和抬起的消息函数实现 (转载)

http://hi.baidu.com/gootyking/item/7ba800e5151597394cdcaf2f

 

对话框上有好几个按钮,按下去要长时间后才抬起,中间要实现方法,不知道怎么实现按下抬起的消息,开始想,分别在按下和抬起的消息中响应,就得知道按的是什么控件,虽然感觉不难,找起来也不方便,结果就发现了另一种方法,我觉得更好一些。。。

重载Dialog的PreTranslateMessage函数 //这个不错哇
BOOL CTestDlgDlg::PreTranslateMessage(MSG* pMsg) 

// TODO: Add your specialized code here and/or call the base class 
      if(pMsg->message == WM_LBUTTONDOWN) 
     { 
           if(WindowFromPoint(pMsg->pt) == GetDlgItem(IDC_BUTTON1)) 
         {

                           // 可以做些什么
            } 
    } 
   else if(pMsg->message == WM_LBUTTONUP) 
   { 
            if(WindowFromPoint(pMsg->pt) == GetDlgItem(IDC_BUTTON1)) 
            { 
                 //AfxMessageBox("Hello"); 
              } 
    } 
return CDialog::PreTranslateMessage(pMsg); 
}

然后只需要把GetDlgItem(IDC_BUTTON1),中的控件名字换了,就好了。。然后在下面写实现什么的方法。

 

感谢原文作者,结合以上帮助,以下为我个人解决我的工程的办法,不用添加OnNMReleasedcaptureProgress,只用重写一个PreTranslateMessage函数,如下(程序在VS2008下用Opencv2.1编写):

BOOL CHumanDetectDlg::PreTranslateMessage(MSG* pMsg)
{
 // TODO: 在此添加专用代码和/或调用基类
 if (pMsg->message == WM_LBUTTONDOWN)
 {
  if (WindowFromPoint(pMsg->pt) == GetDlgItem(IDC_SLIDER))
  {
   KillTimer(1);
  }
  
 }
 else if (pMsg->message == WM_LBUTTONUP)
 {
  if (WindowFromPoint(pMsg->pt) == GetDlgItem(IDC_SLIDER))
  {
   int nPos = Strl->GetPos();
   if (nPos != FrameCount)//FrameCount为记录视频总帧数的变量,滑动条的范围就是0-FrameCount
   {
    cvSetCaptureProperty(m_pCapture,CV_CAP_PROP_POS_FRAMES,nPos);//设置视频
   }
   m_omitFps = nPos;//m_omitFps为记录视频帧数的变量,为防止定时器中的滑动条位置设置不会回退,这句必须有!!!
  }
 SetTimer(1,40,NULL);//视频帧率为25帧/s
 }

 return CDialog::PreTranslateMessage(pMsg);
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 猫5天不吃不喝躲起来该怎么办 两个月的小家猫睡觉要黏人睡怎么办 成年的儿子不听话做父母要怎么办 听到孩子上课又不听话想揍他怎么办 18个月小孩脾气很犟怎么办 烦自己的孩子想弄死他怎么办 楼道经常有小孩在门口恶作剧怎么办 2岁宝宝咳嗽咳吐了怎么办 不小心把鱼刺吃下去该怎么办 儿子在学校被老师甩耳光我该怎么办 家长诬陷老师打她家孩子耳光怎么办 一岁宝宝总觉得有痰怎么办 一岁宝宝感冒咳嗽有痰怎么办 哭的时候踹不过气来应该怎么办 孩子在幼儿园被老师罚站怎么办 孩子屁股打肿了又红又紫怎么办 生完孩子两个月一直浑身疼怎么办 宝宝被蚊子叮咬后红肿硬怎么办 小孩屁股青一块紫一块打的怎么办 小孩的手被鞭子抽红了怎么办 孩子每次写作业都要挨打挨骂怎么办 儿子四岁脾气特别大怎么办呢 月子里屁股被开水烫了怎么办 学生打闹家长只找老师责任怎么办 两个学生打闹受伤的孩子家长怎么办 小孩学习不好做家长的该怎么办 对学习不入门的小孩家长该怎么办 孩子老做作业发神上课不专心怎么办 儿子成绩考得差不专心未来怎么办 五年级学生写字慢又丑怎么办 宝宝上课坐不住不听老师话怎么办 三岁宝宝特调皮打他还还手怎么办 怀孕40天不知道喝酒了怎么办 怀孕四十天的时候喝酒抽烟了怎么办 宝宝怀孕三十天左右喝酒了怎么办 两个人都喝酒了意外怀孕怎么办 不知道自己怀孕了喝了很多酒怎么办 不知道自己怀孕了喝了一次酒怎么办 我儿子11岁了有多动症怎么办 面对老师的冷暴力家长该怎么办? 面对无德的老师家长该怎么办