1.mp3播放器:工具箱中右键,在弹出的菜单中选择“选择项”,添加“com组件”,选择名称“windows Media Player",点击确定就会在工具箱新增一个“windows Media Player"控件。程序中隐藏到了wf本身的边框,用picturebox实现移动无边框窗体效果,通过定时器实时更新进度条,最后理解控件playState的几种状态就没有什么了。

  #region 移动无边框窗体
private void pictureBox3_MouseDown(object sender, MouseEventArgs e)
{
int xOffset;
int yOffset;
if (e.Button == MouseButtons.Left)
{
xOffset = -e.X;
yOffset = -e.Y;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void pictureBox3_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouseOffset.X, mouseOffset.Y);
Location = mousePos;
}
} private void pictureBox3_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
#endregion
int m = ;
private void timer1_Tick(object sender, EventArgs e)
{
int i = (int)axWindowsMediaPlayer1.playState;
switch (i)
{
case : lblStauts.Text = "状态:停止"; break;
case : lblStauts.Text = "状态:暂停"; break;
case : lblStauts.Text = "状态:播放"; break;
case : lblStauts.Text = "状态:正在缓冲"; break;
case : lblStauts.Text = "状态:正在连接"; break;
case : lblStauts.Text = "状态:准备就绪"; break;
}
lbljindu.Text = axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;
if (m == )
{
hScrollBar1.Maximum = (int)axWindowsMediaPlayer1.currentMedia.duration;
hScrollBar1.Minimum = ;
hScrollBar1.Value = (int)axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
hScrollBar2.Value = axWindowsMediaPlayer1.settings.volume;
}
}

2.wpf音频视频播放器

本视频播放器主要用到MediaElement控件(微软官网例子),它是wpf中提供的一个包含音频和视频的控件,位于System.Windows.Controls下,方法同第一个mp3播放器的类似,不过由于wpf中没有”打开“对话框的相关类OpenFileDialog,所以需要添加wf窗体应用程序中基础类库的引用(右键”添加引用"----".Net"----"System.Windows.Forms")

用于处理全屏的类:

 public static class AllScreen
{
private static Window _fullWindow;
private static WindowState _windowState;
private static WindowStyle _windowStyle;
private static bool _windowTopMost;
private static ResizeMode _windowResizeMode;
private static Rect _windowRect; /// <summary>
/// 进入全屏
/// </summary>
/// <param name="window"></param>
public static void GoFullscreen(this Window window)
{
//存储窗体信息
_windowState = window.WindowState;
_windowStyle = window.WindowStyle;
_windowTopMost = window.Topmost;
_windowResizeMode = window.ResizeMode;
_windowRect.X = window.Left;
_windowRect.Y = window.Top;
_windowRect.Width = window.Width;
_windowRect.Height = window.Height;
//变成无边窗体
window.WindowState = WindowState.Normal;//假如已经是Maximized,就不能进入全屏,所以这里先调整状态
window.WindowStyle = WindowStyle.None;
window.ResizeMode = ResizeMode.NoResize;
window.Topmost = true;//最大化后总是在最上面
//获取窗口句柄
var handle = new WindowInteropHelper(window).Handle;
//获取当前显示器屏幕
Screen screen = Screen.FromHandle(handle);
//调整窗口最大化,全屏的关键代码就是下面3句
window.MaxWidth = screen.Bounds.Width;
window.MaxHeight = screen.Bounds.Height;
window.WindowState = WindowState.Maximized;
//解决切换应用程序的问题
window.Activated += new EventHandler(window_Activated);
window.Deactivated += new EventHandler(window_Deactivated);
//记住成功最大化的窗体
_fullWindow = window;
} static void window_Deactivated(object sender, EventArgs e)
{
var window = sender as Window;
window.Topmost = false;
} static void window_Activated(object sender, EventArgs e)
{
var window = sender as Window;
window.Topmost = true;
} /// <summary>
/// 退出全屏
/// </summary>
/// <param name="window"></param>
public static void ExitFullscreen(this Window window)
{
//恢复窗口先前信息,这样就退出了全屏
window.Topmost = _windowTopMost;
window.WindowStyle = _windowStyle;
window.ResizeMode = ResizeMode.CanResize;//设置为可调整窗体大小
window.Left = _windowRect.Left;
window.Width = _windowRect.Width;
window.Top = _windowRect.Top;
window.Height = _windowRect.Height;
window.WindowState = _windowState;//恢复窗口状态信息
window.ResizeMode = _windowResizeMode;//恢复窗口可调整信息
//移除不需要的事件
window.Activated -= window_Activated;
window.Deactivated -= window_Deactivated;
_fullWindow = null;
} /// <summary>
/// 窗体是否在全屏状态
/// </summary>
/// <param name="window"></param>
/// <returns></returns>
public static bool IsFullscreen(this Window window)
{
if (window == null)
{
throw new ArgumentNullException("window");
}
return _fullWindow == window;
}
}

3.wpf播放器扩展

这个在窗体上放入3个MediaElement,然后调整一下样式。。。

        private void btnPause_Click(object sender, RoutedEventArgs e)
{
mmBear.Pause();
mmFractal.Pause();
mmButterfly.Pause();
} private void btnPlay_Click(object sender, RoutedEventArgs e)
{
mmBear.Play();
mmFractal.Play();
mmButterfly.Play();
} private void btnRewind_Click(object sender, RoutedEventArgs e)
{
mmBear.Position = new TimeSpan();
mmFractal.Position = new TimeSpan();
mmButterfly.Position = new TimeSpan();
}

3个项目的源代码戳这里或者捅这里

CS中调用微软自带com组件实现音频视频播放(wf/wpf)的更多相关文章

  1. iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )

    在网上找到了下在记录下来以后方便用 在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用:

  2. 五十五、SAP中调用系统自带的函数

    一.我们需要取一个月中的最后一天,代码如下 二.执行结果如下 三.以上为纯手打,错了好几次才改过来,还有一个办法就是系统自动生成,点击编辑->模式 四.输入需要调用的函数名字BKK_GET_MO ...

  3. C# 使用微软自带的Speech进行语音输出

    1.在VS中使用微软自带的Speech进行语音播报,首先需要添加引用: 2.具体实现逻辑代码如下:

  4. MVC异步AJAX的三种方法(JQuery的Get方法、JQuery的Post方法和微软自带的异步方法)

    异步是我们在网站开发过程中必不可少的方法,MVC框架的异步方法也有很多,这里介绍三种方法: 一.JQuery的Get方法 view @{ Layout = null; } <!DOCTYPE h ...

  5. 26Flutter 日期 和时间戳/格式化日期库/flutter异步/ 官方自带日期组件showDatePicker、时间组件showTimePicker以及国际化

    /* 一.Flutter日期和时间戳 日期转换成时间戳 var now=newDateTime.now(); print(now.millisecondsSinceEpoch); //单位毫秒,13位 ...

  6. vue中的v-model原理,与组件自定义v-model

    VUE中的v-model可以实现双向绑定,但是原理是什么呢?往下看看吧 根据官方文档的解释,v-model其实是一个语法糖,它会自动的在元素或者组件上面解析为 :value="" ...

  7. jQuery Ajax 方法调用 Asp.Net WebService 以及调用aspx.cs中方法的详细例子

    一.jQuery Ajax 方法调用 Asp.Net WebService (引自Terry Feng) Html文件 <!DOCTYPE html PUBLIC "-//W3C//D ...

  8. FORM中调用JAVA组件

    调用方式: 链接:可以在一个数据块中创建专门的 Bean Area项,使用 Implementation Class 特性链接到J a v a B e a n,使用W h e n - C u s t ...

  9. C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法

    原文:C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法 本人新手,在.Net中写WebAPI的时候,当接口返回的json数据含有日期时间类型的字段时, ...

随机推荐

  1. NAT,网络地址转换详解

    这个技术,是一个非常成熟的技术了,但是,为了将其弄得清楚点,体系点,也为了备忘,还是有必要在这里梳理一下! NAT:Network Address Translation. 这个主要是用在网络地址(I ...

  2. 访问本机的WEB API 报400错误

    当时用的IP是127.0.0.1 报400错误,换成 localhost 后正常.

  3. HackerRank "Minimum Average Waiting Time" !

    Something to learn: http://blog.csdn.net/yuwenshi/article/details/36666453 Shortest Job First Algori ...

  4. phpize的安装

    一直想装VLD却一直没装上,因为需要用到phpize,但这个工具大部分机子都没有装,上网搜了一下大部分都是讲phpize的应用没有讲怎么安装. 今天终于搜到了,不过是要在linux机器上,有yum命令 ...

  5. System.Data.SqlClient.SqlException.Number的所有错误值列表

    在系统数据库(master或msdb或model)的架构(sys)的视图(messages)中: SELECT [message_id]      ,[language_id]      ,[seve ...

  6. 8. redis的主从复制和sentinal

    一. redis主从复制(读写分离) redis的主从复制分为两类节点:1个master和多个slave,master进行读写操作,slav进行只读操作 启动步骤: 主节点照常启动,slave节点启动 ...

  7. POJ 1410 Intersection(计算几何)

    题目大意:题目意思很简单,就是说有一个矩阵是实心的,给出一条线段,问线段和矩阵是否相交解题思路:用到了线段与线段是否交叉,然后再判断线段是否在矩阵里面,这里要注意的是,他给出的矩阵的坐标明显不是左上和 ...

  8. CSS如何实现图片上下垂直居中

    方法一: 使用margin方式,使图片在div中上下垂直居中.margin-top值的计算方式是:div的高度/2-图片高度/2. 代码实例如下: <!DOCTYPE html><h ...

  9. 专注于提高“人肉测试”效率,Bugtags已完成600万元天使轮融资

    导语:近日,专注于移动测试的缺陷发现及管理工具“Bugtags”创始人张磊独家透露,Bugtags已完成600万元天使轮投资,投资方为高捷资本. 近日,专注于移动测试的缺陷发现及管理工具“Bugtag ...

  10. EF下CodeFirst、DBFirst与ModelFirst分析

    EF4.1有三种方式来进行数据操作及持久化.分别是Database-First,Model-First,Code-first:1.Database First是基于已存在的数据库,利用某些工具(如Vs ...