總結一下,下午半天進行的MP3播放器的開發:
首先,建立一個解決方案:命名MP3solution,設定FormBorderStyle為None,即上面的圖示,最大化最小化按鈕隐藏,但如圖所示還有最大化關閉按鈕,這時自己添加的兩個PictureBox控件,下面的暫停,停止,靜音等也是PictureBox控件設定其Image屬性為properties資源中的圖檔.如何導入圖檔資源也是一個關鍵點。我們點選Properties下的Resources檔案,然後在添加資源中添加圖檔資源PNG圖檔。值得一提的是,圖檔控件的BackColor屬性設定為Transparent,及顯示為背景顔色。别的還有兩三個label控件,用來顯示播放的是哪首音樂,和目前是否播放還是暫停等狀态,還有一個用來顯示當天播放到幾秒鐘的狀态,兩個hscrollBar進度條一個用來顯示目前音樂的播放進度,另一個是顯示聲音的大小。另外引進一個openFileDialog控件和timer控件,分别用來打開音樂源檔案和定期檢測播放器的運作狀态,及時顯示到label控件上。
接下來我們來看看,背景代碼段:首先定義四個變量,其作用注釋如下:
private PointmouseOffset;//記錄滑鼠坐标
private bool ismouseDown = false;//判斷是否按下滑鼠
boolflag = false;//判斷是播放還是打開選擇視窗
static bool MM = true;//記錄是否靜音
看到窗體最右上角的兩個按鍵最小化和關閉按鈕,其代碼如下:
//窗體最小化
private void pictureBox1_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
//關閉按鈕
private void pictureBox2_Click(object sender, EventArgs e)
Application.Exit();
當初在設定form窗體的FormBorderStyle屬性為None的時候,其實就意味着目前的窗體是不能用滑鼠來移動了,那我們如何正常移動它呢?這個要我們額外用代碼來實作:
#region
移動無邊框窗體
private void pictureBox3_MouseDown(object sender, MouseEventArgs e)
int xOffset;
//定義X坐标
int yOffset;
//定義Y坐标
if (e.Button == MouseButtons.Left)
{ //如果滑鼠的左鍵點選了,則将坐标分别進行相應的移動
xOffset = -e.X;
yOffset = -e.Y;
mouseOffset = new Point(xOffset,yOffset);
ismouseDown = true;
//将mousedowm變量置為true,說明mousedown了
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)
{ //如果滑鼠按鍵松開了,則将mousedown屬性置為false,說明滑鼠的左鍵已經松開
ismouseDown = false;
#endregion
int m = 0;
//打開播放按鈕,選擇要播放的MP3檔案
private void pictureBox4_Click(object sender, EventArgs e)
if (!flag)
//如果是打開按鈕,則打開檔案
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
axWindowsMediaPlayer1.URL = openFileDialog1.FileName;
m = 1;
lblSongTitle.Text = "歌曲名稱:"
+ axWindowsMediaPlayer1.currentMedia.getItemInfo("Title");
}
else
axWindowsMediaPlayer1.Ctlcontrols.play();
//暫停功能
private void pictureBox5_Click(object sender, EventArgs e)
axWindowsMediaPlayer1.Ctlcontrols.pause();
flag = true;
//停止功能
private void pictureBox6_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.stop();
flag = false;
//靜音功能
private void pictureBox7_Click(object sender, EventArgs e)
if (MM)
pictureBox7.Image = (Image)Properties.Resources.音量按鈕變色;
axWindowsMediaPlayer1.settings.mute = true;
MM = false;
pictureBox7.Image = (Image)Properties.Resources.音量按鈕;
axWindowsMediaPlayer1.settings.mute = false;
MM = true;
如何動态設定圖檔的背景色,即當你點選一個按鈕時顯示的是不同的圖檔效果,在這裡我們可以這隻圖檔控件的背景圖檔為資源裡面的圖檔
private void pictureBox4_MouseEnter(object sender, EventArgs e)
pictureBox4.Image = (Image)Properties.Resources.播放按鈕變;
private void pictureBox4_MouseLeave(object sender, EventArgs e)
pictureBox4.Image = (Image)Properties.Resources.播放按鈕;
private void pictureBox5_MouseEnter(object sender, EventArgs e)
pictureBox5.Image = (Image)Properties.Resources.暫停按鈕變;
private void pictureBox5_MouseLeave(object sender, EventArgs e)
pictureBox5.Image = (Image)Properties.Resources.暫停按鈕;
private void pictureBox6_MouseEnter(object sender, EventArgs e)
pictureBox6.Image = (Image)Properties.Resources.停止按鈕變;
private void pictureBox6_MouseLeave(object sender, EventArgs e)
pictureBox6.Image = (Image)Properties.Resources.停止按鈕;
Timer這個類用來定期檢測播放器的狀态,以便及時更新資訊,顯示給使用者看
private void timer1_Tick(object sender, EventArgs e)
int i = (int)axWindowsMediaPlayer1.playState;
switch (i)
case 1: lblStauts.Text = "狀态:停止";
break;
case 2: lblStauts.Text = "狀态:暫停";
case 3: lblStauts.Text = "狀态:播放";
case 6: lblStauts.Text = "狀态:正在緩沖";
case 9: lblStauts.Text = "狀态:正在連接配接";
case 10: lblStauts.Text = "狀态:準備就緒";
lbljindu.Text = axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;
if (m == 1)
hScrollBar1.Maximum =
(int)axWindowsMediaPlayer1.currentMedia.duration;
hScrollBar1.Minimum = 0;
hScrollBar1.Value = (int)axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
hScrollBar2.Value = axWindowsMediaPlayer1.settings.volume;
//音樂播放程序條,用來顯示已經播放了多少了
private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = e.NewValue;
//聲音程序條
private void hScrollBar2_Scroll(object sender, ScrollEventArgs e)
axWindowsMediaPlayer1.settings.volume = e.NewValue;
}
通過一個小小軟體的開發,又收獲到一些小的知識點,電池沒電了,就簡單介紹了一下,還有待改進!
