progress bar and playlist in media player
How can I create a progress bar and a playlist for a media player? I'm making my own media player in C#.
Here is the code to play a file
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QuartzTypeLib;
using System.Runtime.InteropServices;
namespace trying
{
public partial class Form1 : Form
{
[DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
public Form1()
{
InitializeComponent开发者_运维百科();
}
// Define constants used for specifying the window style.
private const int WS_CHILD = 0x40000000;
private const int WS_CLIPCHILDREN = 0x2000000;
// Hold a form-level reference to the media control interface,
// so the code can control playback of the currently loaded
// movie.
public IMediaControl mc =null;
public IMediaPosition m=null;
// Hold a form-level reference to the video window in case it
// needs to be resized.
public IVideoWindow videoWindow = null;
public int a;
private void button1_Click(object sender, EventArgs e)
{
if (mc != null)
{
mc.Run();
}
}
private void button2_Click(object sender, EventArgs e)
{
mc.Stop();
}
private void button3_Click(object sender, EventArgs e)
{
mc.Pause();
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
//Calculate the volume that's being set
int NewVolume = ((ushort.MaxValue / 10) * trackBar1.Value);
// Set the same volume for both the left and the right channels
uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
// Set the volume
waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}
private void newFileToolStripMenuItem_Click(object sender, EventArgs e)
{
// Allow the user to choose a file.
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter =
"Media Files|*.mpg;*.avi;*.wma;*.mov;*.wav;*.mp2;*.mp3|" +
"All Files|*.*";
if (DialogResult.OK == openFileDialog.ShowDialog())
{
// Stop the playback for the current movie, if it exists.
if (mc != null) mc.Stop();
// Load the movie file.
FilgraphManager graphManager = new FilgraphManager();
graphManager.RenderFile(openFileDialog.FileName);
// Attach the view to a picture box on the form.
try
{
videoWindow = (IVideoWindow)graphManager;
videoWindow.Owner = (int)pictureBox1.Handle;
videoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;
videoWindow.SetWindowPosition(
pictureBox1.ClientRectangle.Left,
pictureBox1.ClientRectangle.Top,
pictureBox1.ClientRectangle.Width,
pictureBox1.ClientRectangle.Height);
}
catch
{
// An error can occur if the file does not have a video
// source (for example, an MP3 file).
// You can ignore this error and still allow playback to
// continue (without any visualization).
}
// Start the playback (asynchronously).
mc = (IMediaControl)graphManager;
mc.Run();
}
}
I want this to work
this.progressBar2.Value =(int) m.CurrentPosition;
but it doesn't work.
m.CurrentPosition is a double, and progressBar1.Value is an int. To cast it do
this.progressBar1.Value = (int)m.CurrentPosition
.
HOWEVER, this will truncate your double to make it an int.
If you want to display current position you need this.progressBar1.Value = (int)m.CurrentPosition;
.
精彩评论