如何为媒体播放器创建进度条和播放列表?我正在用C#制作自己的媒体播放器。
以下是播放文件的代码
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();
}
}
我想要这个工作
this.progressBar2.Value =(int) m.CurrentPosition;
但它不起作用。
答案 0 :(得分:2)
m.CurrentPosition是一个double,progressBar1.Value是一个int。要施展它
this.progressBar1.Value = (int)m.CurrentPosition
。
但是,这会截断你的double,使其成为一个int。
答案 1 :(得分:1)
如果您想显示当前位置,则需要this.progressBar1.Value = (int)m.CurrentPosition;
。