频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

利用VC#开发一个媒体播放器

来源:enet 作者:天极网 出处:巧巧读书 2007-09-28 进入讨论组
上一页 1 2 3 4 5 
  如何来播放,暂停,停止?

  简单这些函数看字面也知道.

  //  

  m_objMediaControl.Run();//播放

  m_objMediaControl.Pause();//暂停

  m_objMediaControl.Stop();//停止   

  // 这段代码非常简单。当用户单击播放/暂停按钮时,代码将检查 Player 的 playState 属性。如果 Player 正在播放数字媒体文件,代码就会暂停文件的播放; 如果 Player 已经暂停或停止,代码就再次启动 Player 播放文件。

  OK,在来看我们是如何控制时间进度的?

  //  

  private void timer1_Tick(object sender, System.EventArgs e)

  {

   if (m_CurrentStatus == MediaStatus.Running)

   {

    UpdateStatusBar();

   }

  }

  看见上面那个 UpdateStatusBar();这里是让它没100ms更新一次状态栏.

  代码如下:  

  private void UpdateStatusBar()

  {

   switch (m_CurrentStatus)

   {

    case MediaStatus.None : statusBarPanel1.Text = "Stopped"; break;

    case MediaStatus.Paused : statusBarPanel1.Text = "Paused "; break;

    case MediaStatus.Running: statusBarPanel1.Text = "Running"; break;

    case MediaStatus.Stopped: statusBarPanel1.Text = "Stopped"; break;

   }

   if (m_objMediaPosition != null)

   {

    int s = (int) m_objMediaPosition.Duration;

    int h = s / 3600;

    int m = (s - (h * 3600)) / 60;

    s = s - (h * 3600 + m * 60);

    statusBarPanel2.Text = String.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);

    s = (int) m_objMediaPosition.CurrentPosition;

    h = s / 3600;

    m = (s - (h * 3600)) / 60;

    s = s - (h * 3600 + m * 60);

    statusBarPanel3.Text = String.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);

   }

   else

   {

    statusBarPanel2.Text = "00:00:00";

    statusBarPanel3.Text = "00:00:00";

   }

  }

  还有一个问题程序怎么能够知道它播放完了?

  这会有点麻烦了,想想看有什么办法呢?对了,windows是消息驱动的。那找找看有什么消息。有的就EC_COMPLETE。还记得"WndProc" 它吗?是的,我的老朋友,这次我们必须要改写它来捕获EC_COMPLETE消息。这个消息是DirectShow通知父窗体,播放结束了。  

  protected override void WndProc(ref Message m)

  {

   if (m.Msg == WM_GRAPHNOTIFY)

   {

    int lEventCode;

    int lParam1, lParam2;

    while (true)

    {

     try

     {

      m_objMediaEventEx.GetEvent(out lEventCode,out lParam1,out lParam2,0);

      m_objMediaEventEx.FreeEventParams(lEventCode, lParam1, lParam2);

      if (lEventCode == EC_COMPLETE)

      {

       m_objMediaControl.Stop();

       m_objMediaPosition.CurrentPosition = 0;

       m_CurrentStatus = MediaStatus.Stopped;

       UpdateStatusBar();

       UpdateToolBar();

      }

     }

     catch (Exception)

     {

      break;

     }

    }

   }

   base.WndProc(ref m);

  }

  只要播放状态改变,上述代码就会运行。如果 Player 正在播放(用户打开文件时就处于播放状态,因为 autoStart 设置为 True),代码将启用播放/暂停按钮和停止按钮,以便用户执行操作。之后,代码将播放/暂停按钮的文字更改为“暂停”,这样用户就可以使用该按钮暂停播放过程。最后,代码检索当前数字媒体文件的标题,并更新标题标签的文字以显示标题。

  如果 Player 被暂停(用户单击了播放/暂停按钮),代码会将播放/暂停按钮的文字更改为“播放”,以提示用户使用该按钮可以恢复播放。

  如果 Player 被停止(用户单击了停止按钮),代码将禁用停止按钮(因 Player 已经停止工作)并将播放/暂停按钮的文字恢复为默认值“播放”。

  一切都结束了,现在要做的事就是做些来找一部影片来享受一下自己的成果了.

  编写完示例项目的代码之后,您可以生成并运行解决方案

  生成解决方案

  在 Build(生成)菜单中单击 Build Solution(生成解决方案)。Visual Studio 开始编译并生成项目。如果键入内容全部正确,生成过程将顺利完成,不会出现任何错误。如果生成报告错误,则请检查您的代码并纠正错误。

  使用示例应用程序

  要在调试器中运行项目,请按键盘上的 F5 键。如果出现“查看生成的代码”主题中介绍的未处理的异常,则应该停止调试会话,删除或注释掉生成代码中的相应行,然后再按 F5 键。

  您可以单击“打开”查找 .wma 或 .wmv 文件(究竟选择何种文件,取决于您在“打开”对话框中选择的文件类型)。选择某个文件并单击“确定”之后,“打开”对话框关闭,开始播放数字媒体文件,传输控制按钮的状态也随之改变。这时您就可以利用传输控制按钮来暂停、重新开始或完全停止播放。  浏览地址: http://www.qqread.com/vc/k572118200.html 更多文章 更多内容请看Wlan组网----家庭专题专题,或进入讨论组讨论。
上一页 1 2 3 4 5 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章