Win10系列:VC++媒体播放控制4
(7)音量控制
MediaElement控件具有一个Volume属性,通过设置此属性的值可以改变视频音量的大小。接下来介绍如何实现视频的音量控制,首先打开MainPage.xaml文件,并在Grid元素中原有代码的基础上继续添加如下的代码:
<TextBlock Margin="543,12,0,0" FontSize="15" HorizontalAlignment="Left" Text="音量:" Width="48"/>
<Slider x:Name="VolumeBar" Minimum="0" Maximum="100" HorizontalAlignment="Left" VerticalAlignment="Top" Width="260" Margin="596,0,0,0" Height="40" ValueChanged="VolumeBarChange"/>
在上面的代码中,添加了一个TextBlock控件和一个名为"VolumeBar"的Slider控件,其中Slider控件用于表示一个音量控制条。通过将Slider控件的Minimum属性和Maximum属性分别赋值为0和100,来将音量控制条的音量范围设置在0~100之间。
添加了上述的代码以后,接下来为Slider控件的ValueChanged事件添加事件处理函数VolumeBarChange。打开MainPage.xaml.h头文件,并添加如下的代码,用来声明VolumeBarChange函数。
private:
//当改变音量控制条时改变视频的音量大小
void VolumeBarChange(Platform::Object^ sender,Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e);
声明了VolumeBarChange函数以后,接着在MainPage.xaml.cpp源文件中添加VolumeBarChange函数的实现代码,具体代码如下所示:
//当改变音量控制条时改变视频的音量大小
void FileDemo::MainPage::VolumeBarChange(Platform::Object^ sender,Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e)
{
//改变视频的音量
Video->Volume = (VolumeBar->Value)/100;
}
在上面的代码中,将Slider控件的Value属性除以100所得到的值赋给MediaElement控件中的Volume属性,从而改变MediaElement控件中视频的音量。
添加音量控制条后,前台界面的显示效果如图20-14所示。
图20-14音量控制条
(8) 添加全屏按钮
实现了视频音量控制之后,接下来实现视频的全屏播放。首先布局前台界面,打开MainPage.xaml文件,并在Grid元素中添加一个"全屏"按钮,用于全屏播放MediaElement控件中的视频,代码如下所示:
<Button x:Name="FullScreenButton" Click="FullScreenClick" HorizontalAlignment="Left" Margin="10,0,10,0" Content="全屏" Grid.Column="5"></Button>
添加了"全屏"按钮以后,前台界面的显示效果如图20-15所示,此按钮显示在"快退"按钮之后。
图20-15全屏按钮
布局了前台界面以后,接下来实现视频的全屏播放功能。打开MainPage.xaml.h头文件,添加如下代码:
private:
bool isFullScreen;
private:
//设置视频全屏播放
void FullScreenClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
在上面的代码中,使用private关键字声明一个bool类型的私有成员变量isFullScreen,用于表示视频的播放模式是否为全屏播放模式。然后使用private关键字声明一个私有的FullScreenClick函数,用于全屏播放视频。
添加了上述的代码以后,接着在MainPage.xaml.cpp源文件中添加FullScreenClick函数的实现代码,具体代码如下所示:
//设置视频全屏播放
void FileDemo::MainPage::FullScreenClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
//设置全屏模式为true
isFullScreen = true;
//根据isFullScreen变量改变视频播放窗口的大小
FullscreenToggle(isFullScreen);
}
在上述的代码中,将isFullScreen变量赋值为true,表示视频的播放模式为全屏播放模式。然后调用FullscreenToggle函数,此函数根据isFullScreen变量的值改变MediaElement控件的大小。
添加了FullScreenClick函数的实现代码以后,接下来在MainPage.xaml.h头文件中添加如下的代码:
private:
Windows::Foundation::Size previousVideoContainerSize;
private:
//根据isFullScreen改变视频窗口的全屏模式
void FullscreenToggle(bool isFullScreen);
在上面的代码中,使用private关键字声明一个Size类型的私有成员变量previousVideoContainerSize,用来保存MediaElement控件的原始大小。然后使用private关键字声明一个私有的FullscreenToggle函数。
声明了FullscreenToggle函数以后,接着在MainPage.xaml.cpp源文件中添加FullscreenToggle函数的实现代码,具体代码如下所示:
//根据isFullScreen改变视频播放窗口的大小
void FileDemo::MainPage::FullscreenToggle(bool isFullScreen)
{
if(isFullScreen)
{
//记录当前MediaElement控件的大小
previousVideoContainerSize.Width = Video->Width;
previousVideoContainerSize.Height = Video->Height;
//将MediaElement控件的大小设置为当前应用窗口的大小
Video->Width = Window::Current->Bounds.Width;
Video->Height = Window::Current->Bounds.Height;
}
else
{
//恢复视频窗口的原始大小
Video->Width = previousVideoContainerSize.Width;
Video->Height = previousVideoContainerSize.Height;
}
}
在上面的代码中,首先判断FullscreenToggle函数的参数isFullScreen是否为true,如果参数isFullScreen为true,则将当前MediaElement控件的Width属性值和Height属性值分别赋给previousVideoContainerSize变量的Width属性和Height属性,以便将其保存。然后将应用窗口的Width属性值和Height属性值赋给MediaElement控件的Width属性和Height属性,从而实现视频的全屏播放。
如果参数isFullScreen为false,则将previousVideoContainerSize变量的Width属性值和Height属性值赋给MediaElement控件的Width属性和Height属性,从而使视频退出全屏播放。
前面只实现了全屏播放的功能,接下来实现通过按下Esc键来退出视频的全屏播放。在MainPage.xaml文件中,指定Grid元素的KeyUp事件处理函数为VideoKeyUp,代码如下所示:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" KeyUp="VideoKeyUp">
接下来在MainPage.xaml.h头文件中添加如下代码,用于声明VideoKeyUp函数。
private:
//退出视频的全屏播放
void VideoKeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs ^ e);
声明了VideoKeyUp函数以后,在MainPage.xaml.cpp源文件中添加VideoKeyUp函数的实现代码,具体代码如下所示:
//当按下Esc键时退出全屏模式
void FileDemo::MainPage::VideoKeyUp(Platform::Object^ sender, Windows::UI::Xaml::Input::KeyRoutedEventArgs ^ e)
{
//当全屏模式下才执行函数
if(isFullScreen && e->Key == Windows::System::VirtualKey::Escape)
{
//设置全屏模式为false
isFullScreen = false;
FullscreenToggle(isFullScreen);
}
}
在VideoKeyUp函数中首先对isFullScreen变量和按下的键进行判断,如果isFullScreen变量为true且在键盘中按下的键为"Esc"时,将isFullScreen变量赋值为false,并以此变量作为参数调用FullscreenToggle函数来退出视频的全屏播放。
(9)完整前台代码
本部分将给出MainPage.xaml文件中完整的前台代码,由于在前面的部分已经对此代码中所包含的控件进行了详细的介绍,这里将不再赘述,读者可参照这些代码来进行前台界面的布局。在MainPage.xaml文件中用于前台布局的代码如下所示:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" KeyUp="VideoKeyUp">
<StackPanel>
<Grid>
<StackPanel>
<Button x:Name="FileButton" Content="打开文件" FontSize="20" Margin="114,30,0,0" Click="FileButtonClick" Width="113" Height="53"></Button>
<MediaElement x:Name="Video" HorizontalAlignment="Left" Height="400" Margin="114,10,0,0" VerticalAlignment="Top" Width="780" AutoPlay="False"/>
</StackPanel>
</Grid>
<Grid>
<StackPanel x:Name="TransportControlsPanel">
<Grid>
<TextBlock x:Name="VideoState" Margin="114,13,0,0" FontSize="15" HorizontalAlignment="Left" Text="播放状态:"></TextBlock>
<TextBlock Margin="543,12,0,0" FontSize="15" HorizontalAlignment="Left" Text="音量:" Width="48"/>
<Slider x:Name="VolumeBar" Minimum="0" Maximum="100" HorizontalAlignment="Left" VerticalAlignment="Top" Width="260" Margin="596,0,0,0" Height="40" ValueChanged="VolumeBarChange"/>
</Grid>
<Slider x:Name="VideoSlider" HorizontalAlignment="Left" Height="40" Margin="114,0,0,0" VerticalAlignment="Top" Width="780" ValueChanged="SliderValueChanged"></Slider>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button x:Name="PlayButton" Click="PlayClick" HorizontalAlignment="Left" Margin="114,0,10,0" Content="播放" Grid.Column="0"></Button>
<Button x:Name="PauseButton" Click="PauseClick" HorizontalAlignment="Left" Margin="10,0,10,0" Content="暂停" Grid.Column="1"></Button>
<Button x:Name="StopButton" Click="StopClick" HorizontalAlignment="Left" Margin="10,0,10,0" Content="停止" Grid.Column="2"></Button>
<Button x:Name="ForwardButton" Click="ForwardClick" HorizontalAlignment="Left" Margin="10,0,10,0" Content="快进" Grid.Column="3"></Button>
<Button x:Name="BackwardButton" Click="BackwardClick" HorizontalAlignment="Left" Margin="10,0,10,0" Content="快退" Grid.Column="4"></Button>
<Button x:Name="FullScreenButton" Click="FullScreenClick" HorizontalAlignment="Left" Margin="10,0,10,0" Content="全屏" Grid.Column="5"></Button>
</Grid>
</StackPanel>
</Grid>
</StackPanel>
</Grid>
Win10系列:VC++媒体播放控制4的更多相关文章
- Win10系列:VC++媒体播放控制1
在MediaElement控件中定义了用于控制视频播放的函数,如Play.Pause和Stop等函数.本小节将在20.6.1小节所新建的项目基础上继续来介绍如何为视频添加播放控制,并在最后一部分给出项 ...
- Win10系列:VC++媒体播放控制2
(3)停止视频播放 接下来添加对视频文件播放的停止控制,打开MainPage.xaml文件,并在Grid元素中添加一个"停止"按钮,用于停止视频的播放,代码如下所示: <Bu ...
- Win10系列:VC++媒体播放控制3
(5)添加视频进度条 视频进度条可以用来显示当前视频的播放进度,并可以通过拖动视频进度条来改变视频的播放进度.接下来介绍如何实现视频进度条,首先打开MainPage.xaml文件,并在Grid元素中添 ...
- Win10系列:VC++媒体播放
媒体播放包括视频播放和音频播放,在开发Windows应用商店应用的过程中可以使用MediaElement控件来播放视频文件和音频文件.本节将通过一个具体的示例介绍如何使用MediaElement控件来 ...
- Movist for Mac(高清媒体播放器)v2.0.7中文特别版
Movist for Mac中文破解版是目前Mac平台上最好用的视频播放器,功能强大简单好用.movist mac版拥有美观简洁的用户界面,提供多种功能,支持视频解码加速高品质的字幕,全屏幕浏览,是与 ...
- Plyr – 简单,灵活的 HTML5 媒体播放器
Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示 ...
- 【C语言入门教程】4.10 综合实例 - 媒体播放器
4.10.1 建立播放列表 数据字典 名称 数据类型 说明 MAX_LENGTH 符号常量 用于定义数组长度,表示列表最大长度 MAX_FILE_LENGTH 符号常量 用于定义数组长度,表示文件名最 ...
- .net C# 网页播放器 支持多种格式 媒体播放器 播放器 代码
.avi格式代码片断如下:<object id='video' width='400' height='200' border='0' classid='clsid:CFCDAA03-8BE4- ...
- C#编写媒体播放器--Microsoft的Directx提供的DirectShow组件,该组件的程序集QuartzTypeLib.dll.
使用C#编写媒体播放器时,需要用到Microsoft的Directx提供的DirectShow组件.用该组件前需要先注册程序集QuartzTypeLib.dll. 1.用QuartzTypeLib.d ...
随机推荐
- NativeWindow_02_DialogBoxParam_VC6
PS: 代码参考于<<Windows环境下32位汇编语言程序设计.chm>>,第5章,"5.4 对 话 框(2)" . ZC: 与CreateWindow( ...
- 搞定'express' 不是内部或外部命令,也不是可运行的程序或批处理文件
1 -- 官方下nodejs,一路next完成, node -v 没问题 可以检测到版本号,node环境ok~ 2-- 本地 安装express :npm install express -g 检测 ...
- 力扣(LeetCode)448. 找到所有数组中消失的数字
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能在不使 ...
- docker下debian镜像开启ssh, 允许root用密码登录
用的官方python镜像做开发, 暴露端口, 用pycharm ssh进去开发. 忽然发现本来ssh能连上, 但是更了新的python镜像连不上了. 有折腾了一下, 连上了. 主要是python官网镜 ...
- Axure 动态面板的状态与尺寸
知识点: 1.动态面板的状态下相当动态面版的模式,当符合某种条件的话就选择对应的动态面板的状态 2.动态面板的尺寸可以根据内容自动调整大小 本节教程主要分为一下图片两种场景: 出现动态面板中的两种.一 ...
- LeetCode--231--2的幂函
问题描述: 给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 示例 1: 输入: 1 输出: true 解释: 2 0 = 1 示例 2: 输入: 16 输出: true 解释: 2 4 ...
- hdoj1043
8数码问题有解:除0外逆序数%2相等.16数码有解:除0外,如果0的行数相差奇数个,逆序也差奇数个,vice versa.
- CentOS7 下源代码安装mysql5.6
###### mysql ######### 引言:这里选用mysql5.6版本,5.7版本编译时间需要几个小时. 编译安装环境: yum -y install make gcc-c++ cmake ...
- dijkstra优化
1, 桶优化最短路, 时间复杂度$O(m+n)$, 空间$O(C)$, $C$为最短路长度 const int N = 1e6+10; int n, m; struct _ {int to,w;}; ...
- SQL SERVER 字符合并多行为一列
[字符合并多行为一列] 思路1:行转列,在与字符拼接(适用每组列数名相同) 思路2:转xml,去掉多余字符(适用所有) 假设兴趣表Hobbys Name Hobby 小张 打篮球 小张 踢足球 Nam ...