共计 19362 个字符,预计需要花费 49 分钟才能阅读完成。
前言:我的项目是 c# 的 winform 写的,应用的播放器是基于 AxWindowsMediaPlayer。
AxWindowsMediaPlayer 的办法
1.1 首先新建一个页面 如图所示:图片左侧是列表 应用 listview 右侧是背景图片。图片框框的中央是前面能够实现的,+ 和 - 按钮别离代表增加文件和删除文件 还有就是管制播放的程序。上面的别离是批改歌词的字体 和展现 / 暗藏
1.2 新建一个通明的歌词页面 [窗体]
1.3 新建一个半透明的页面 [窗体]
1.4 业务代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WMPLib;
using System.Media;
using System.IO;
using System.Text.RegularExpressions;
using AxWMPLib;
using System.Drawing.Drawing2D;
using CCWin;
namespace KenMusicPlayer
{
public partial class MusicPlayer : Skin_DevExpress
{
public int index = 1;
public int listIndex;
private bool first_in = true; // 是否第一次进入歌词区域
private bool showLrc = true;// 默认显示歌词
private int imageInd = 0;// 播放的图片下标
private List<string> imageList;// 播放的图片
private Point closePoint;// 敞开按钮的地位
private Size dfSize;// 最后的地位
// 声音
SoundPlayer player = new SoundPlayer();
Dictionary<string, string> dic = new Dictionary<string, string>();
// 播放列表
Dictionary<string, IWMPMedia> playListDict = new Dictionary<string, IWMPMedia>();
List<string> al = new List<string>(); // 以后歌词时间表
IWMPMedia media;
/*
* 上面这一大段 API 调用,次要是用来设置歌词窗口的滚动条的
* 但其实前面,我并没有怎么用到,只是在将滚动条滚动到底部时,用了一下
*/
private const int WM_VSCROLL = 0x115;
private const int SB_HORZ = 0;
private const int SB_VERT = 1;
private const int SB_CTL = 2;
private const int SB_BOTH = 3;
private const int SB_LINEUP = 0;
private const int SB_LINELEFT = 0;
private const int SB_LINEDOWN = 1;
private const int SB_LINERIGHT = 1;
private const int SB_PAGEUP = 2;
private const int SB_PAGELEFT = 2;
private const int SB_PAGEDOWN = 3;
private const int SB_PAGERIGHT = 3;
private const int SB_THUMBPOSITION = 4;
private const int SB_THUMBTRACK = 5;
private const int SB_TOP = 6;
private const int SB_LEFT = 6;
private const int SB_BOTTOM = 7;
private const int SB_RIGHT = 7;
private const int SB_ENDSCROLL = 8;
private const int WM_PAINT = 0x000F;
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool ScrollWindow(IntPtr hWnd, int XAmount, int YAmount, ref Rectangle lpRect, ref Rectangle lpClipRect);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetScrollPos(IntPtr hwnd, int nBar, int nPos, bool bRedraw);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetScrollPos(int nBar, int nPos, bool bRedraw);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int GetScrollPos(IntPtr hwnd, int nBar);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool UpdateWindow(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public void setWord()
{ }
public MusicPlayer()
{
this.StartPosition = FormStartPosition.CenterScreen;// 窗口居中显示
InitializeComponent();}
private void MusicPlayer_Load(object sender, EventArgs e)
{InitLoad();
}
/// <summary>
/// 初始化 加载播放列表 如歌词 背景图 定时器等等
/// </summary>
private void InitLoad()
{
try
{
bool flag = false;
string folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bgImages");
DirectoryInfo root = new DirectoryInfo(folder);
FileInfo[] files = root.GetFiles();
string fileName;
for (int i = 0; i < files.Length; i++)
{fileName = files[i].Name.ToLower();
if (fileName.EndsWith(".png") || fileName.EndsWith(".jpeg") || fileName.EndsWith(".jpg"))
{if (!flag)
{imageList = new List<string>();
this.pictureBox1.Image = Image.FromFile(files[i].FullName);
}
imageList.Add(files[i].FullName);
flag = true;
}
}
playerType.Text = playerType.Items[0].ToString();// 默认第一个
closePoint = this.skinButtonClose.Location;
dfSize = this.Size;
richTextBox1.BackColor = this.TransparencyKey;
skinComboBoxFontName.Text = skinComboBoxFontName.Items[0].ToString();// 默认第一个
skinComboBoxFontSize.Text = skinComboBoxFontSize.Items[0].ToString();// 默认第一个
ComboBoxSkinSelect.Text = ComboBoxSkinSelect.Items[0].ToString();// 默认第一个
//this.BackPalace = Image.FromFile(ComboBoxSkinSelect.Items[0].ToString());// 默认第一个
lvDetail.AllowDrop = true;
lvDetail.View = View.Details;
lvDetail.DragEnter += Files_DragEnter;// 对象拖拽事件
lvDetail.DragDrop += Files_DragDrop;// 拖拽操作实现事件
//wmp.OpenStateChange += WMP_OpenStateChange;
wmp.PlayStateChange += WMP_PlayStateChange;
timerImgs.Start();}
catch (Exception ex)
{Console.WriteLine("谬误:" + ex.Message);
}
}
/// <summary>
/// 提供给通明歌词窗口的定时器调用的
/// </summary>
/// <param name="s"></param>
public void showTmform(bool s)
{if (s)
{this.btmForm.Show();
if (this.first_in)
{
this.lrcForm.TopMost = true;
Point point = this.Location;
point.Y = point.Y + this.Height;
this.lrcForm.Location = point;
this.btmForm.Location = point;
this.lrcForm.Width = this.Width;
this.btmForm.Width = this.Width;
this.first_in = false;
}
}
else
{
this.first_in = true;
this.btmForm.Hide();}
}
/// <summary>
/// 播放时会进入这个事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WMP_PlayStateChange(object sender, _WMPOCXEvents_PlayStateChangeEvent e)
{loadLrc();
}
/// <summary>
/// 拖拽操作实现事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Files_DragDrop(object sender, DragEventArgs e)
{
try
{
string fileName, fileExtension, fileSize, temp;
FileInfo fi = null;
ListViewItem lvi = null;
Array array = (Array)e.Data.GetData(DataFormats.FileDrop);
Regex regex = new Regex("(\\.mp3|\\.wav|\\.wma)");
string filePath;
for (int i = 0; i < array.Length; i++)
{filePath = array.GetValue(i).ToString();
// 属于音乐文件 且列表中不存在
if (regex.IsMatch(filePath) &&
!dic.ContainsKey(filePath))
{wmp.Ctlcontrols.stop();
InsertPlayList(out fileName, out fileExtension, out fileSize, out temp, out fi, out lvi, filePath);
}
}
}
catch (Exception ex)
{MessageBox.Show(ex.Message, "谬误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 插入播放列表 和字典集
/// </summary>
/// <param name="fileName"></param>
/// <param name="fileExtension"></param>
/// <param name="fileSize"></param>
/// <param name="temp"></param>
/// <param name="fi"></param>
/// <param name="lvi"></param>
/// <param name="filePath"></param>
private void InsertPlayList(out string fileName, out string fileExtension, out string fileSize, out string temp, out FileInfo fileInfo, out ListViewItem listViewItem, string filePath)
{fileInfo = new FileInfo(filePath);
temp = filePath.Remove(filePath.LastIndexOf('.'));
fileName = Path.GetFileNameWithoutExtension(filePath);
fileExtension = Path.GetExtension(filePath);
fileSize = (fileInfo.Length / 1024).ToString() + "KB";
listViewItem = new ListViewItem();
listViewItem.Text = index++.ToString();
listViewItem.SubItems.AddRange(new string[] {fileName, fileExtension, fileSize, filePath});
lvDetail.Items.Add(listViewItem);
// 增加到播放列表
media = wmp.newMedia(filePath);
//listIndex++,
//wmp.currentPlaylist.insertItem(media);
wmp.currentPlaylist.appendItem(media);
playListDict.Add(filePath, media);
// 杜绝反复项
dic.Add(filePath, fileName);
}
/// <summary>
/// 文件拖拽进入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Files_DragEnter(object sender, DragEventArgs e)
{if (e.Data.GetDataPresent(DataFormats.FileDrop))
{e.Effect = DragDropEffects.Link;}
else
{e.Effect = DragDropEffects.None;}
}
/// <summary>
/// 导入文件
/// </summary>
private void tsmiLoading_Click(object sender, EventArgs e)
{
string fileName, fileExtension, fileSize, temp;
FileInfo fi = null;
ListViewItem lvi = null;
openFileDialog1.Multiselect = true;
openFileDialog1.Filter = "mp3 文件 (*.mp3)|*.mp3|wav 文件 (*.wav)|*.wav|wma 文件 (*.wma)|*.wma";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
// 程序播放
wmp.settings.setMode("shuffle", false);
foreach (string filePath in openFileDialog1.FileNames)
{if (!dic.ContainsKey(filePath))
{InsertPlayList(out fileName, out fileExtension, out fileSize, out temp, out fi, out lvi, filePath);
}
}
}
}
/// <summary>
/// 革除列表
/// </summary>
private void ListViewClear_Click(object sender, EventArgs e)
{lvDetail.Items.Clear();
}
/// <summary>
/// 播放
/// </summary>
private void tsmiPlayer_Click(object sender, EventArgs e)
{wmp.Ctlcontrols.play();
}
/// <summary>
/// 暂停
/// </summary>
private void tsmiWaiting_Click(object sender, EventArgs e)
{wmp.Ctlcontrols.pause();
}
/// <summary>
/// 进行
/// </summary>
private void tsmiStop_Click(object sender, EventArgs e)
{wmp.Ctlcontrols.stop();
}
/// <summary>
/// 退出
/// </summary>
private void tsmiExit_Click(object sender, EventArgs e)
{Application.Exit();
}
/// <summary>
/// 双击某项播放
/// </summary>
private void lvDetail_DoubleClick(object sender, EventArgs e)
{if (lvDetail.SelectedItems.Count > 0)
{wmp.currentMedia = wmp.currentPlaylist.Item[int.Parse(lvDetail.SelectedItems[0].Text) - 1];
}
}
/// <summary>
/// 循环播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tsmiXunHuan_Click(object sender, EventArgs e)
{
// 点击项
ToolStripMenuItem currentItem = (ToolStripMenuItem)sender;
ToolStripItemCollection items = this.tsmiSet.DropDownItems;
ToolStripMenuItem item;
for (int i = 0; i < items.Count; i++)
{item = (ToolStripMenuItem)items[i];
item.Checked = false;
if (item.Name == currentItem.Name)
{item.Checked = true;}
}
wmp.settings.setMode("loop", true);
}
// 程序
private void tsmiDanQu_Click(object sender, EventArgs e)
{
IWMPMedia currentMedia = wmp.currentMedia;
// 点击项
ToolStripMenuItem currentItem = (ToolStripMenuItem)sender;
ToolStripItemCollection items = this.tsmiSet.DropDownItems;
ToolStripMenuItem item;
for (int i = 0; i < items.Count; i++)
{item = (ToolStripMenuItem)items[i];
item.Checked = false;
if (item.Name == currentItem.Name)
{item.Checked = true;}
}
// 程序播放
wmp.settings.setMode("shuffle", false);
}
/// <summary>
/// 图片宽高设置
/// </summary>
/// <param name="imgToResize"></param>
/// <param name="size"></param>
/// <returns></returns>
public static Image ResizeImage(Image imgToResize, Size size)
{
// 获取图片宽度
int sourceWidth = imgToResize.Width;
// 获取图片高度
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
// 计算宽度的缩放比例
nPercentW = ((float)size.Width / (float)sourceWidth);
// 计算高度的缩放比例
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
// 冀望的宽度
int destWidth = (int)(sourceWidth * nPercent);
// 冀望的高度
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((System.Drawing.Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
// 绘制图像
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (System.Drawing.Image)b;
}
private void playerType_SelectedIndexChanged(object sender, EventArgs e)
{if (playerType.Text == "程序播放")
{
// 程序播放
wmp.settings.setMode("shuffle", false);
}
else if (playerType.Text == "循环播放")
{wmp.settings.setMode("loop", true);
}
else if (playerType.Text == "随机播放")
{
// 程序播放
wmp.settings.setMode("shuffle", true);
}
}
/// <summary>
/// 定时器执行的办法,每隔 1 秒执行一次 歌词逐行显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ShowLineLrc(object sender, EventArgs e)
{
this.label1.Text = this.wmp.Ctlcontrols.currentPositionString;
if (this.lrcForm == null)
{this.lrcForm = new TMForm();
Point pos = this.Location;
pos.Y = lrcForm.Location.Y + lrcForm.Height;
this.Location = pos;
this.btmForm = new BTMForm();
MusicPlayer mainForm = (MusicPlayer)this.Owner;
btmForm.Location = pos;
this.lrcForm.Owner = this;
this.btmForm.Owner = this;
this.btmForm.Hide();
this.lrcForm.Show();}
if (this.wmp.currentMedia == null)
{
this.richTextBox1.Text = "";
return;
}
string durationString = this.wmp.currentMedia.durationString;
int trackBarValue = Convert.ToInt32(this.wmp.Ctlcontrols.currentPosition);
//this.trackBar1.Maximum = Convert.ToInt32(this.wmp.currentMedia.duration);
//this.trackBar1.Value = Convert.ToInt32(this.wmp.Ctlcontrols.currentPosition);
if (this.richTextBox1.Text != "歌词文件不存在" && this.richTextBox1.Text != "歌词文件内容为空")
{int pos = al.IndexOf(trackBarValue.ToString());
bool isAr = this.richTextBox1.Text.Contains("歌手:");
bool isTi = this.richTextBox1.Text.Contains("歌名:");
if (pos >= 0)
{
int n = isAr ? 1 : 0;
int m = isTi ? 1 : 0;
int height = 28 * (this.al.Count + m + n);
int max = height - this.richTextBox1.Height;
this.richTextBox1.SelectAll();
this.richTextBox1.SelectionColor = Color.Black;
this.richTextBox1.SelectionLength = 0;/**/
int l = this.richTextBox1.Lines[pos + m + n].Length;
this.richTextBox1.Select(this.richTextBox1.GetFirstCharIndexFromLine(pos + m + n), l);
this.richTextBox1.SelectionColor = Color.OrangeRed;
this.richTextBox1.SelectionLength = 0;
//this.Text = GetScrollPos(this.richTextBox1.Handle, SB_VERT).ToString() + "-" + al.Count + "-" + this.richTextBox1.Height;
if ((pos + m + n) * 28 <= max)
{int start = this.richTextBox1.GetFirstCharIndexFromLine(pos + m + n);
this.richTextBox1.SelectionStart = start;
this.richTextBox1.ScrollToCaret();}
else
{//this.richTextBox1.Focus();
SendMessage(this.richTextBox1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
UpdateWindow(this.richTextBox1.Handle);
//this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
//this.richTextBox1.ScrollToCaret();}
if (this.lrcForm != null)
{string l1 = this.richTextBox1.Lines[pos + m + n];
string l2;
if ((pos + m + n) < this.richTextBox1.Lines.Length - 1)
{l2 = this.richTextBox1.Lines[pos + m + n + 1];
}
else
{l2 = "。。。。。";}
this.lrcForm.setLrc(l1, l2, pos);
//this.lrcForm.setLrc(ArrayList al,);
}
}
}
//this.Text = this.trackBar1.Value.ToString();
/*if (trackBarValue >= (this.trackBar1.Maximum - 2))
{this.PlayModeChange();
}*/
}
/// <summary>
/// 载入歌词
/// </summary>
/// <param name="lrc_filename"> 歌词路径名 </param>
public void loadLrc()
{if (this.wmp.playState == WMPPlayState.wmppsPlaying)
{
IWMPMedia currentMedia = wmp.currentMedia;
string fullPath = currentMedia.sourceURL;
string geciPath = Path.Combine(Path.GetDirectoryName(fullPath), Path.GetFileNameWithoutExtension(fullPath) + ".lrc");
// 播放哪个资源 列表需选中
ListView.ListViewItemCollection listViewItems = lvDetail.Items;
lvDetail.FullRowSelect = true;
for (int i = 0; i < listViewItems.Count; i++)
{listViewItems[i].Checked = false;
listViewItems[i].Selected = false;
listViewItems[i].BackColor = Color.White;
if (listViewItems[i].SubItems[4].Text == fullPath)
{listViewItems[i].Checked = true;
listViewItems[i].Selected = true;
listViewItems[i].BackColor = Color.LightBlue;
}
}
if (!File.Exists(geciPath))
{
this.richTextBox1.Text = "歌词文件内容为空";
return;
}
using (StreamReader sr = new StreamReader(new FileStream(geciPath, FileMode.Open), Encoding.Default))
{
string tempLrc = "";
while (!sr.EndOfStream)
{tempLrc = sr.ReadToEnd();
}
if (tempLrc.Trim() == "")
{
this.richTextBox1.Text = "歌词文件内容为空";
return;
}
tempLrc = tempLrc.Trim();
Regex rg = new Regex("\r*\n*\\[ver:(.*)\\]\r*\n*");
tempLrc = rg.Replace(tempLrc, "");
rg = new Regex("\r*\n*\\[al:(.*)\\]\r*\n*");
tempLrc = rg.Replace(tempLrc, "");
rg = new Regex("\r*\n*\\[by:(.*)\\]\r*\n*");
tempLrc = rg.Replace(tempLrc, "");
rg = new Regex("\r*\n*\\[offset:(.*)\\]\r*\n*");
tempLrc = rg.Replace(tempLrc, "");
rg = new Regex("\r*\n*\\[ar:(.*)\\]\r*\n*");
Match mtch;
mtch = rg.Match(tempLrc);
tempLrc = rg.Replace(tempLrc, "\n 歌手:" + mtch.Groups[1].Value + "\n");
rg = new Regex("\r*\n*\\[ti:(.+?)\\]\r*\n*"); // 这里留神贪心匹配问题.+?
mtch = rg.Match(tempLrc);
tempLrc = rg.Replace(tempLrc, "\n 歌名:" + mtch.Groups[1].Value + "\n");
rg = new Regex("\r*\n*\\[[0-9][0-9]:[0-9][0-9].[0-9][0-9]\\]");
MatchCollection mc = rg.Matches(tempLrc);
al.Clear();
foreach (Match m in mc)
{string temp = m.Groups[0].Value;
//this.Text += temp + "+";
string mi = temp.Substring(temp.IndexOf('[') + 1, 2);
string se = temp.Substring(temp.IndexOf(':') + 1, 2);
string ms = temp.Substring(temp.IndexOf('.') + 1, 2); // 这是毫秒,其实我只准确到秒,毫秒前面并没有用
//this.Text += mi + ":" + se + "+";
string time = Convert.ToInt32(mi) * 60 + Convert.ToInt32(se) + ""; // 这里并没有增加毫秒
al.Add(time);
}
tempLrc = rg.Replace(tempLrc, "\n");
char[] remove = { '\r', '\n', ' '};
this.richTextBox1.Text = tempLrc.TrimStart(remove);
this.timer1.Interval = 1000;
this.timer1.Tick += ShowLineLrc;
this.timer1.Start();}
}
}
private void wmp_Enter(object sender, EventArgs e)
{loadLrc();// 点击播放
}
/// <summary>
/// 删除选中的文件 并进行播放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinButton2_Click(object sender, EventArgs e)
{
try
{
ListView.SelectedIndexCollection indexes = this.lvDetail.SelectedIndices;
if (indexes.Count > 0)
{int index = indexes[0];
string path = this.lvDetail.Items[index].SubItems[4].Text;
IWMPPlaylist iWMPPlaylist = wmp.currentPlaylist;
// 先移除播放列表 再移除 listview 列表
wmp.currentPlaylist.removeItem(playListDict[path]);
playListDict.Remove(path);
this.lvDetail.Items[index].Remove();
dic.Remove(path);
wmp.Ctlcontrols.stop();}
}
catch (Exception ex)
{
MessageBox.Show("操作失败!\n" + ex.Message, "提醒", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}
}
/// <summary>
/// 列表鼠标双击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvDetail_MouseDoubleClick(object sender, MouseEventArgs e)
{
try
{
ListView.SelectedIndexCollection indexes = this.lvDetail.SelectedIndices;
if (indexes.Count > 0)
{int index = indexes[0];
string path = this.lvDetail.Items[index].SubItems[4].Text;
wmp.Ctlcontrols.playItem(playListDict[path]);
//wmp.URL = path;// 这种形式会失去播放列表【不是肉眼可见的 listview 列表】wmp.Ctlcontrols.stop();
wmp.Ctlcontrols.play();}
}
catch (Exception ex)
{
MessageBox.Show("操作失败!\n" + ex.Message, "提醒", MessageBoxButtons.OK,
MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}
}
/// <summary>
/// 字体扭转
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinComboBoxFontName_SelectedIndexChanged(object sender, EventArgs e)
{if (this.lrcForm != null)
{this.lrcForm.ChangeLabelFont(this.skinComboBoxFontName.SelectedItem.ToString(), this.skinComboBoxFontSize.SelectedItem.ToString());
}
}
/// <summary>
/// 字体大小扭转
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{if (this.lrcForm != null)
{this.lrcForm.ChangeLabelFont(this.skinComboBoxFontName.SelectedItem.ToString(), this.skinComboBoxFontSize.SelectedItem.ToString());
}
}
/// <summary>
/// 歌词是否显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinButton5_Click(object sender, EventArgs e)
{if (this.lrcForm == null)
{return;}
this.showLrc = !this.showLrc;
this.skinButton5.Text = this.showLrc ? "敞开" : "显示";
if (this.showLrc)
{this.btmForm.Show();
this.lrcForm.Show();}
else
{this.btmForm.Hide();
this.lrcForm.Hide();}
}
/// <summary>
/// 背景图片切换
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timerImgs_Tick(object sender, EventArgs e)
{if (imageInd <= imageList.Count - 2)
{
imageInd++;
this.pictureBox1.Image.Dispose();
this.pictureBox1.Image = Image.FromFile(imageList[imageInd]);
}
else
{imageInd=0;}
}
/// <summary>
/// 粘贴音乐到播放列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lvDetail_KeyDown(object sender, KeyEventArgs e)
{System.Collections.Specialized.StringCollection stringCollection = Clipboard.GetFileDropList();
if (stringCollection != null)
{
string fileName, fileExtension, fileSize, temp;
FileInfo fi = null;
ListViewItem lvi = null;
foreach (var item in stringCollection)
{if ((item.ToLower().EndsWith(".mp3") ||
item.ToLower().EndsWith(".wav") ||
item.ToLower().EndsWith(".wma")) && !dic.ContainsKey(item) )
{InsertPlayList(out fileName, out fileExtension, out fileSize, out temp, out fi, out lvi, item);
}
}
}
}
// 抉择皮肤
private void ComboBoxSkinSelect_SelectedIndexChanged(object sender, EventArgs e)
{string bgColor = ComboBoxSkinSelect.SelectedItem.ToString();
if (!string.IsNullOrEmpty(ComboBoxSkinSelect.SelectedItem.ToString()))
{switch (bgColor)
{
case "突变黑":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_black;
break;
case "天蓝色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_light_blue;
break;
case "墨绿色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_green;
break;
case "蓝色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_s_blue;
break;
case "浅灰色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_grey;
break;
case "亮色":
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_light;
break;
default:
this.BorderPalace = kenMusicPlayer.Properties.Resources.bg_black;
break;
}
/*this.UpdateStyles();
this.Update();*/
//this.BackPalace = Image.FromFile(ComboBoxSkinSelect.SelectedItem.ToString());
}
}
/// <summary>
/// 退出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinButtonClose_Click(object sender, EventArgs e)
{//this.Close();
Application.Exit();}
private void MusicPlayer_Resize(object sender, EventArgs e)
{
try
{
Size size = this.Size;
int x = (size.Width - dfSize.Width) + closePoint.X;
int y = closePoint.Y;//(size.Height - dfSize.Height) + closePoint.Y;
Point point = new Point(x, y);
this.skinButtonClose.Location = point;
}
catch (Exception ex)
{Console.WriteLine("异样:" + ex.Message);
}
}
/// <summary>
/// 改办法也是提供给通明歌词窗口用的,用来批改半透明窗体的地位,是通明歌词窗口和半透明窗体始终重合
/// </summary>
/// <param name="pos"></param>
public void moveTmform(Point pos)
{this.btmForm.Location = pos;}
}
}
源码地址:https://gitee.com/ten-ken/mus…
本文来源于:程序员 ken,专属平台有 csdn、思否 (SegmentFault)、简书、开源中国 (oschina)、掘金,转载请注明出处。
正文完