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();
}