已有56人关注
DirectShow多媒体播放器进度条不走
发表在C#图书答疑 2010-04-28
是否精华
版块置顶:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QuartzTypeLib;
namespace bofang222
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }
        //设置常量

        const int WM_APP = 0x8000;

        const int WM_GRAPHNOTIFY = WM_APP + 1;

        const int EC_COMPLETE = 0x01;

        const int WS_CHILD = 0x40000000;

        const int WS_CLIPCHILDREN = 0x2000000;
       FilgraphManager m_objFilterGraph = null;

        IBasicAudio m_objBasicAudio = null;

        IVideoWindow m_objVidwoWindow = null;

        IMediaEvent m_objMediaEvent = null;

        IMediaEventEx m_obnMediaEventEx = null;
        IMediaPosition m_objMediaPosition = null;

        IMediaControl m_objMediaControl = null;

        //枚举

        enum MediaStatus { None, Stopped, Paused, Running };

       MediaStatus m_CurrentStatus = MediaStatus.None;

       private void Clear()
       {

          if (m_objMediaControl != null)

            m_objMediaControl.Stop();

          if (m_obnMediaEventEx != null)

            m_obnMediaEventEx.SetNotifyWindow(0, 0, 0);
             if(m_objVidwoWindow!=null)

          {

            m_objVidwoWindow.Visible = 0;

            m_objVidwoWindow.Owner = 0;

          }
           if (m_objBasicAudio != null) m_objBasicAudio = null;

          if (m_objFilterGraph != null) m_objFilterGraph = null;
          if (m_objMediaControl != null) m_objMediaControl = null;

          if (m_objMediaEvent != null) m_objMediaEvent = null;

          if (m_objMediaPosition != null) m_objMediaPosition = null;

          if (m_objVidwoWindow != null) m_objVidwoWindow = null;

          if (m_obnMediaEventEx != null) m_obnMediaEventEx = null;
          
          this.Text = "宋广阔做的多媒体播放器";

          trackBar1.Value = 0;

      }
       private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();

openFile.Filter = "选择播放文件|*.mpg;*.avi;*.mov;*.wma;*.wav;*.mp3|All Files|*.*";

          if (DialogResult.OK == openFile.ShowDialog())

          {

            this.Clear();  //清理正在播放的文件

            m_objFilterGraph = new FilgraphManager();
            timer1.Enabled = true;
          try

                {

                m_objFilterGraph.RenderFile(openFile.FileName);

                m_objBasicAudio = m_objFilterGraph as IBasicAudio;//图像控制接口

                m_objVidwoWindow = m_objFilterGraph as IVideoWindow; //声音控制接口

                m_objVidwoWindow.Owner =(int) this.Handle;

                //设置窗口类型

                m_objVidwoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;

                //设置播放容器

                m_objVidwoWindow.SetWindowPosition(this.ClientRectangle.Left, this.ClientRectangle.Top, this. ClientRectangle.Width, this.ClientRectangle.Height-60);

               }
              catch (Exception ex)

             {

                MessageBox.Show(ex.Message);

                //当出错时,为音频文件,将视频对象清空

                m_objVidwoWindow = null;

             }
             m_objMediaEvent = m_objFilterGraph as IMediaEvent; //播放事件接口

              m_obnMediaEventEx = m_objFilterGraph as IMediaEventEx; //扩展播放事件接口

    m_obnMediaEventEx.SetNotifyWindow((int)this.Handle, WM_GRAPHNOTIFY, 0);

    m_objMediaPosition = m_objFilterGraph as IMediaPosition; //播放位置和速度控制

    m_objMediaControl = m_objFilterGraph as IMediaControl;  //用来控制流媒体播放控制接口

               this.Text = openFile.FileName +"----"+ this.Text;

               m_objMediaControl.Run(); //播放文件
               try

               {

                   trackBar1.LargeChange = 1;

                   trackBar1.Maximum = (int)m_objMediaPosition.Duration;

                   timer1.Enabled = True;

               }

               catch { }

          }

       }
        public void button2_Click(object sender, EventArgs e)
        {
        //播放
           
         if (m_objMediaControl!=null)

           m_objMediaControl.Run();
          }

        private void button3_Click(object sender, EventArgs e)
        {
        //暂停

         m_objMediaControl.Pause();

        }
         private void button4_Click(object sender, EventArgs e)
        {
        //停止

         m_objMediaControl.Stop();

         m_objMediaPosition.CurrentPosition = 0;

         this.Clear();


        }
        private void button5_Click(object sender, EventArgs e)
        {
        //快退

         if (m_objMediaPosition.CurrentPosition >= 1)

         m_objMediaPosition.CurrentPosition = m_objMediaPosition.CurrentPosition - 1;

         else

           m_objMediaPosition.CurrentPosition = 0;


        }
        private void button6_Click(object sender, EventArgs e)
        {
        //快进
            int i = 0;
            for (i = 0; i < 100; i++)
            {
                m_objMediaPosition.CurrentPosition = m_objMediaPosition.CurrentPosition + 1;
            }

        }
         [font size=5][font color=#FF0000]private void timer1_Tick(object sender, EventArgs e)
        {
            
                trackBar1.Value = (int)m_objMediaPosition.CurrentPosition;

        }[/font]
[/font]   
          private void trackBar1_Scroll(object sender, EventArgs e)
        {
        //根据滚动进度条,来播放文件

          m_objMediaPosition.CurrentPosition = trackBar1.Value;
         

        }

      }
    
}


为什么就是 进度条不能自动走哪?请指点谢谢?还有在此程序的基础上怎样加入调节音量?盼高手急回!!!
           
分享到:
精彩评论 1
小科_mrkj
学分:43 LV2
2010-04-28
沙发
读者朋友:
    您好,在程序中插入断点调试一下,看看设置进度条那段代码走没走。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照