(5)添加视频进度条

视频进度条可以用来显示当前视频的播放进度,并可以通过拖动视频进度条来改变视频的播放进度。接下来介绍如何实现视频进度条,首先打开MainPage.xaml文件,并在Grid元素中添加一个名为"VideoSlider"的Slider控件,用来表示一个视频进度条,代码如下所示:

<Slider x:Name="VideoSlider" HorizontalAlignment="Left" Height="40" Margin="114,0,0,0" VerticalAlignment="Top" Width="780" ValueChanged="SliderValueChanged"></Slider>

添加Slider控件以后,接下来将视频进度条和MediaElement控件中的视频进行同步,即当播放MediaElement控件中的视频时,视频进度条的值将跟着改变。为了实现视频进度条和视频的同步,需要用到计时器。打开MainPage.xaml.h头文件,添加如下的代码:

private:

    //声明timer变量

    Windows::UI::Xaml::DispatcherTimer^ timer;

    //声明timeSpan变量

    Windows::Foundation::TimeSpan timeSpan;

在上面的代码中,使用private关键字声明了两个私有的成员变量timer和timeSpan,其中timer是一个DispatcherTimer类型的变量,表示计时器,timeSpan是一个TimeSpan类型的变量,使用timeSpan变量来设置时间间隔。

添加了上述代码以后,接着在MainPage.xaml.cpp源文件中添加如下代码来创建计时器:

MainPage::MainPage()

{

    InitializeComponent();

    //创建计时器

    timer=ref new DispatcherTimer();

    //触发Tick事件调用DispatcherTimerTick函数

    timer->Tick +=ref new EventHandler<Object^>(this,&FileDemo::MainPage::DispatcherTimerTick);

    //设置计时器的时间间隔为1ms

    timeSpan.Duration=10000;

    timer->Interval=timeSpan;

    //启动计时器

    timer->Start();

}

在上面的代码中,首先初始化一个DispatcherTimer类的对象timer,并为timer对象的Tick事件添加事件处理函数DispatcherTimerTick,此函数用来在视频播放时更新视频进度条的值,后面将介绍这个函数的实现代码。然后将timeSpan的Duration属性赋值为10000,并把此对象赋值给timer对象的Interval属性,使timer对象的Tick事件每1毫秒触发一次。最后调用timer对象的Start函数来启动计时器。

创建了计时器以后,接下来在MainPage.xaml.h头文件中添加如下的代码,用来声明DispatcherTimerTick函数。

private:

    //更新视频进度条

    void DispatcherTimerTick(Platform::Object^ sender, Platform::Object^ e);

声明了DispatcherTimerTick函数以后,接着在MainPage.xaml.cpp源文件中添加DispatcherTimerTick函数的实现代码,具体代码如下所示:

//更新视频进度条

void FileDemo::MainPage::DispatcherTimerTick(Object^ sender, Object^ e)

{

    VideoState->Text="播放状态:"+Video->CurrentState.ToString();

    //判断视频是否已加载

    if(Video->NaturalDuration.TimeSpan.Duration > 0.0)

    {

        //将当前视频位置的时间除以视频总的时间,更新VideoSlider的Value属性值

    VideoSlider->Value=(100*(Video->Position.Duration)/(Video->NaturalDuration.TimeSpan.Duration));

    }

}

在上述的代码中,首先使用MediaElement控件中的CurrentState属性得到视频的播放状态,并调用ToString函数将其转换成字符串类型,显示到名为"VideoState"的TextBlock控件中。然后判断视频文件是否已加载到MediaElement控件中,如果视频文件已加载,则通过MediaElement控件中的Position属性来得到视频已经播放的进度时间,并通过NaturalDuration属性得到视频的总时间,接着将视频已经播放的进度时间除以视频的总时间并乘以100,把得到的进度值赋值给名为"VideoSlider"的Slider控件的Value属性表示播放进度的百分比。

添加了DispatcherTimerTick函数的实现代码以后,接下来实现通过拖动视频进度条来改变视频的播放进度的功能。在MainPage.xaml.h头文件中添加如下的代码:

private:

    Windows::Foundation::TimeSpan positionTimeSpan;

private:

    //根据视频进度条改变视频的播放进度

    void SliderValueChanged(Platform::Object^ sender,Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e);

在上述的代码中,使用private关键字声明一个TimeSpan类型的私有成员变量positionTimeSpan,用来表示时间进度。接着使用private关键字声明一个私有的SliderValueChanged函数,此函数用来改变视频的播放进度。

声明了SliderValueChanged函数以后,在MainPage.xaml.cpp源文件中添加SliderValueChanged函数的实现代码,具体代码如下所示:

//根据视频进度条改变视频的播放进度

void FileDemo::MainPage::SliderValueChanged(Object^ sender, Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e)

{

    //当播放时不能改变进度条的值

    if(!Video->CurrentState.ToString()->Equals("Playing"))

    {

    positionTimeSpan.Duration=(e->NewValue)*(Video->NaturalDuration.TimeSpan.Duration)/100;

        Video->Position=positionTimeSpan;    

    }

}

在上面的代码中,首先使用if语句进行判断,如果MediaElement控件的播放状态不是Playing时,则通过参数e的NewValue属性得到视频进度条更新的值,并通过MediaElement控件的NaturalDuration属性得到视频的总时间,接着将视频进度条更新的值乘上视频的总时间并除以100,将得到的值赋给positionTimeSpan变量的Duration属性。最后将positionTimeSpan变量赋值给MediaElement控件的Position属性。

添加视频进度条之后,前台界面的显示效果如图20-13所示。

图20-13视频进度条

Win10系列:VC++媒体播放控制3的更多相关文章

  1. Win10系列:VC++媒体播放控制1

    在MediaElement控件中定义了用于控制视频播放的函数,如Play.Pause和Stop等函数.本小节将在20.6.1小节所新建的项目基础上继续来介绍如何为视频添加播放控制,并在最后一部分给出项 ...

  2. Win10系列:VC++媒体播放控制4

    (7)音量控制 MediaElement控件具有一个Volume属性,通过设置此属性的值可以改变视频音量的大小.接下来介绍如何实现视频的音量控制,首先打开MainPage.xaml文件,并在Grid元 ...

  3. Win10系列:VC++媒体播放控制2

    (3)停止视频播放 接下来添加对视频文件播放的停止控制,打开MainPage.xaml文件,并在Grid元素中添加一个"停止"按钮,用于停止视频的播放,代码如下所示: <Bu ...

  4. Win10系列:VC++媒体播放

    媒体播放包括视频播放和音频播放,在开发Windows应用商店应用的过程中可以使用MediaElement控件来播放视频文件和音频文件.本节将通过一个具体的示例介绍如何使用MediaElement控件来 ...

  5. Movist for Mac(高清媒体播放器)v2.0.7中文特别版

    Movist for Mac中文破解版是目前Mac平台上最好用的视频播放器,功能强大简单好用.movist mac版拥有美观简洁的用户界面,提供多种功能,支持视频解码加速高品质的字幕,全屏幕浏览,是与 ...

  6. Plyr – 简单,灵活的 HTML5 媒体播放器

    Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示      ...

  7. 【C语言入门教程】4.10 综合实例 - 媒体播放器

    4.10.1 建立播放列表 数据字典 名称 数据类型 说明 MAX_LENGTH 符号常量 用于定义数组长度,表示列表最大长度 MAX_FILE_LENGTH 符号常量 用于定义数组长度,表示文件名最 ...

  8. .net C# 网页播放器 支持多种格式 媒体播放器 播放器 代码

    .avi格式代码片断如下:<object id='video' width='400' height='200' border='0' classid='clsid:CFCDAA03-8BE4- ...

  9. C#编写媒体播放器--Microsoft的Directx提供的DirectShow组件,该组件的程序集QuartzTypeLib.dll.

    使用C#编写媒体播放器时,需要用到Microsoft的Directx提供的DirectShow组件.用该组件前需要先注册程序集QuartzTypeLib.dll. 1.用QuartzTypeLib.d ...

随机推荐

  1. django使用表单

    假设你想从表单接收用户名数据,一般情况下,你需要在HTML中手动编写一个如下的表单元素: <form action="/your-name/" method="po ...

  2. js常见知识点3.面向对象之继承、设计模式

    一.面向对象的三大特征 建议回复: 封装:屏蔽内部细节.调用外部接口实现对应功能(函数调用) 继承:子类继承父类中的属性和方法 多态(js中不存在多态的概念) 二.继承 建议回复: 继承:子类继承父类 ...

  3. QT---事件系统

    1         QT事件系统 1.1  事件的定义 QT中事件是有专门的类QEvent,常见的有键盘事件QKeyEvent.鼠标事件QMouseEvent和定时器事件QTimerEvent.例如用 ...

  4. Codeforces 981 E - Addition on Segments

    E - Addition on Segments 思路: dp dp[i]表示构成i的区间的右端点 先将询问按r排序 然后,对于每次询问,每次枚举 i 从 n-x 到 1,如果dp[i] >= ...

  5. Axure 元件的移动效果

    元件的移动主要是指当点击某一元件(登录)时,某些元件会发生移动或者是左右移动的动画效果,先将登录界面设置为动态面板,然后再设置动作 本节主要应用于一下三种场景: 1.当邮箱不为空.密码为空时,点击登录 ...

  6. induced pluripotent stem cell (iPSC) 诱导性多能干细胞

    参考: 诱导性多能干细胞 Induced pluripotent stem cell Induced Pluripotent Stem Cells: Problems and Advantages w ...

  7. Spring Batch JSR-305 支持

    本发布版本中为 JSR-305 支持添加了一个注解.这个为了与 Spring 框架中的  Null-safety 注解取得平衡,然后为 Spring Batch 添加为 public APIs. 这个 ...

  8. Tempter of the Bone HDU - 1010

    The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked it u ...

  9. spring boot(十六)使用Jenkins部署spring boot

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...

  10. 【CSS】【1】让DIV中的文字换行显示

    <div style="white-space:normal;word-break:break-all;word-wrap:break-word;">data</ ...