开发者

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; .

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜