www.pudn.com > MCIWnd_MediaPlayer.rar > MediaPlayerDlg.cpp


// MediaPlayerDlg.cpp : 实现文件 
// 
 
#include "stdafx.h" 
#include "MediaPlayer.h" 
#include "MediaPlayerDlg.h" 
#include ".\mediaplayerdlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 
 
 
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框 
 
class CAboutDlg : public CDialog 
{ 
public: 
	CAboutDlg(); 
 
// 对话框数据 
	enum { IDD = IDD_ABOUTBOX }; 
 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持 
 
// 实现 
protected: 
	DECLARE_MESSAGE_MAP() 
}; 
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
} 
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
} 
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
END_MESSAGE_MAP() 
 
 
// CMediaPlayerDlg 对话框 
 
 
 
CMediaPlayerDlg::CMediaPlayerDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CMediaPlayerDlg::IDD, pParent) 
	, menuHeight(0) 
	, borderWidth(0) 
{ 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
	memDC.m_hDC=NULL; 
} 
 
void CMediaPlayerDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	DDX_Control(pDX, IDC_LIST2, fileList); 
	DDX_Control(pDX, IDC_STATE, m_state); 
	DDX_Control(pDX, IDC_VOL, m_vol); 
	DDX_Control(pDX, IDC_PLAY, m_play); 
	DDX_Control(pDX, IDC_STOP, m_stop); 
	DDX_Control(pDX, IDC_FORM, m_form); 
	DDX_Control(pDX, IDC_NEXT, m_next); 
	DDX_Control(pDX, IDC_PCITURE1, m_picture); 
} 
 
BEGIN_MESSAGE_MAP(CMediaPlayerDlg, CDialog) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	//}}AFX_MSG_MAP 
	ON_WM_TIMER() 
	ON_WM_SIZE() 
	ON_WM_SIZING() 
	ON_BN_CLICKED(IDC_PLAY, OnBnClickedPlay) 
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_STATE, OnNMReleasedcaptureState) 
	ON_MESSAGE(WM_CHANGEPOS,ShowPos) 
	ON_MESSAGE(WM_FINISH,Finish) 
	ON_MESSAGE(WM_NEXT,Next) 
	ON_BN_CLICKED(IDC_STOP, OnBnClickedStop) 
	ON_WM_CONTEXTMENU() 
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_VOL, OnNMReleasedcaptureVol) 
	ON_COMMAND(ID_RATE, OnRate) 
	ON_COMMAND(ID_OPEN, OnOpen) 
	ON_COMMAND(ID_EXIT, OnExit) 
	ON_LBN_DBLCLK(IDC_LIST2, OnLbnDblclkList2) 
	ON_BN_CLICKED(IDC_NEXT, OnBnClickedNext) 
	ON_BN_CLICKED(IDC_FORM, OnBnClickedForm) 
	ON_STN_CLICKED(IDC_PCITURE1, OnStnClickedPciture1) 
	ON_WM_ERASEBKGND() 
	ON_WM_MOUSEMOVE() 
	ON_WM_CTLCOLOR() 
	ON_COMMAND(ID_SKIN, OnSkin) 
	ON_COMMAND(ID_DEL, OnDel) 
	ON_COMMAND(ID_ADD, OnAdd) 
END_MESSAGE_MAP() 
 
 
// CMediaPlayerDlg 消息处理程序 
 
BOOL CMediaPlayerDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	// 将\“关于...\”菜单项添加到系统菜单中。 
 
	// IDM_ABOUTBOX 必须在系统命令范围内。 
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 
	ASSERT(IDM_ABOUTBOX < 0xF000); 
 
	CMenu* pSysMenu = GetSystemMenu(FALSE); 
	if (pSysMenu != NULL) 
	{ 
		CString strAboutMenu; 
		strAboutMenu.LoadString(IDS_ABOUTBOX); 
		if (!strAboutMenu.IsEmpty()) 
		{ 
			pSysMenu->AppendMenu(MF_SEPARATOR); 
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 
		} 
	} 
 
	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 
	//  执行此操作 
	SetIcon(m_hIcon, TRUE);			// 设置大图标 
	SetIcon(m_hIcon, FALSE);		// 设置小图标 
 
 
	 
	CRect rect1,rect2; 
	this->GetClientRect(rect1); 
	this->GetWindowRect(rect2); 
	menuHeight=rect2.Height()-rect1.Height(); 
	borderWidth=rect2.Width()-rect1.Width(); 
	CMyPlayer::RegisterWndClass(AfxGetInstanceHandle()); 
 
	SetTimer(1,500,NULL); 
	//m_state.SetRange(0,100); 
	// TODO: 在此添加额外的初始化代码 
	//SetTimer(1,1000,NULL); 
	//player.Init(this); 
	//player.Init(m_hWnd); 
	//player.OpenFile("发牌.wmv"); 
	m_player.Create(_T("CMyPlayer"),"MyPlayer",WS_CHILD|WS_VISIBLE,CRect(0,0,rect1.Width()-ListWidth,rect1.Height()-BottomMarg),this,1001); 
	//m_player.Max(); 
 
 
	skin="背景.bmp"; 
 
	LayOut(); 
	SetButtonState(); 
	// 
	m_play.SetActiveTextColor(RGB(255,0,0)); 
	m_play.SetNormalTextColor(RGB(255,255,0)); 
	m_play.SetMouseDownTextColor(RGB(0,0,255)); 
	m_stop.SetActiveTextColor(RGB(255,0,0)); 
	m_stop.SetNormalTextColor(RGB(255,255,0)); 
	m_stop.SetMouseDownTextColor(RGB(0,0,255)); 
	m_form.SetActiveTextColor(RGB(255,0,0)); 
	m_form.SetNormalTextColor(RGB(255,255,0)); 
	m_form.SetMouseDownTextColor(RGB(0,0,255)); 
	m_next.SetActiveTextColor(RGB(255,0,0)); 
	m_next.SetNormalTextColor(RGB(255,255,0)); 
	m_next.SetMouseDownTextColor(RGB(0,0,255)); 
	//fileList.Invalidate(); 
	HBITMAP hBmp=(HBITMAP)LoadImage(NULL,skin,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);  
	//fileList.m_bmp.Attach(hBmp); 
	//fileList.Refresh(); 
	 fileList.SetColor(RGB(255,255,0),RGB(255,255,255)); 
	fileList.Invalidate(); 
	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE 
} 
 
void CMediaPlayerDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
// 如果向对话框添加最小化按钮,则需要下面的代码 
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, 
//  这将由框架自动完成。 
 
void CMediaPlayerDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // 用于绘制的设备上下文 
 
		SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); 
 
		// 使图标在工作矩形中居中 
		int cxIcon = GetSystemMetrics(SM_CXICON); 
		int cyIcon = GetSystemMetrics(SM_CYICON); 
		CRect rect; 
		GetClientRect(&rect); 
		int x = (rect.Width() - cxIcon + 1) / 2; 
		int y = (rect.Height() - cyIcon + 1) / 2; 
 
		// 绘制图标 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
		/*CClientDC  dc(this); 
		CRect rect; 
		this->GetClientRect(rect); 
		HBITMAP hBmp=(HBITMAP)LoadImage(NULL,skin,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);  
		CDC     memDC; 
		CBitmap	bitmap; 
		BITMAP  bmp; 
		bitmap.Attach(hBmp); 
		//bitmap.LoadBitmap(IDB_BITMAP_BACK); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.CreateCompatibleDC (&dc); 
		memDC.SelectObject (bitmap); 
		//pDC->BitBlt (0,0,bmp.bmWidth ,bmp.bmHeight ,&memDC,0,0,SRCCOPY); 
		dc.SetStretchBltMode(STRETCH_DELETESCANS); 
		dc.StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);*/ 
	} 
	//player.Draw(); 
} 
 
//当用户拖动最小化窗口时系统调用此函数取得光标显示。 
HCURSOR CMediaPlayerDlg::OnQueryDragIcon() 
{ 
	return static_cast(m_hIcon); 
} 
 
LRESULT CMediaPlayerDlg::OnMyMessage(WPARAM lParam,LPARAM  wParam) 
{ 
	//OnPaint(); 
	//this->Invalidate(); 
	//this->UpdateWindow(); 
	//RedrawWindow(0,0,RDW_INVALIDATE | RDW_UPDATENOW|RDW_FRAME); 
	//WM_SYNCPAINT 
	//Invalidate(); 
	//WM_NCPAINT 
	//SendMessage(WM_SYNCPAINT); 
	//this->OnNcPaint(); 
	return LRESULT(); 
} 
 
void CMediaPlayerDlg::OnTimer(UINT nIDEvent) 
{ 
	//m_state.SetPos(m_player.state.cur); 
	CDialog::OnTimer(nIDEvent); 
} 
 
void CMediaPlayerDlg::OnSize(UINT nType, int cx, int cy) 
{ 
	CDialog::OnSize(nType, cx, cy); 
	LayOut(); 
} 
 
void CMediaPlayerDlg::OnSizing(UINT fwSide, LPRECT pRect) 
{ 
	/*if(()||()) 
		return;*/ 
	if(pRect->right-pRect->leftright=pRect->left+RightMarg+borderWidth; 
	if(pRect->bottom-pRect->topbottom=pRect->top+BottomMarg+menuHeight; 
	CDialog::OnSizing(fwSide, pRect); 
} 
 
void CMediaPlayerDlg::LayOut(void) 
{ 
	CRect rect; 
	GetClientRect(rect); 
	if(menuHeight==0) 
		return; 
	m_player.MoveWindow(0,0,rect.Width()-ListWidth,rect.Height()-BottomMarg); 
	if(rect.Height()>=BottomMarg)//还有地方显示列表(高度) 
	{ 
		fileList.MoveWindow(rect.Width()-ListWidth,0,ListWidth,rect.Height()-BottomMarg); 
	} 
	int modify=3; 
	m_play.MoveWindow(ButtonLeft,rect.Height()-ButtonHeight-modify,ButtonWidth,ButtonHeight); 
	m_stop.MoveWindow(ButtonLeft+ButtonWidth*1+ButtonBetween*1,rect.Height()-ButtonHeight-modify,ButtonWidth,ButtonHeight); 
	m_form.MoveWindow(ButtonLeft+ButtonWidth*2+ButtonBetween*2,rect.Height()-ButtonHeight-modify,ButtonWidth,ButtonHeight); 
	m_next.MoveWindow(ButtonLeft+ButtonWidth*3+ButtonBetween*3,rect.Height()-ButtonHeight-modify,ButtonWidth,ButtonHeight); 
	m_vol.MoveWindow(ButtonLeft+ButtonWidth*4+ButtonBetween*4,rect.Height()-ButtonHeight-modify,77,26); 
	m_state.MoveWindow(ButtonLeft,rect.Height()-ButtonHeight-26-modify,rect.Width(),26); 
	m_picture.MoveWindow(rect.Width()-20,rect.Height()-20-modify,20,20); 
	m_play.ReSet(); 
	m_form.ReSet(); 
	m_next.ReSet(); 
	m_stop.ReSet(); 
	m_state.DrawTransparent(1); 
	m_vol.DrawTransparent(1); 
	Invalidate(); 
} 
 
void CMediaPlayerDlg::OnBnClickedPlay() 
{ 
	if(fileList.GetCount()==0) 
		return; 
	if(m_player.state.ps==Stopped||m_player.state.ps==Pausing) 
	{ 
		if(m_player.state.ps==Pausing) 
			m_player.PlayFromState(); 
		else 
		{ 
			int i=fileList.GetCurSel(); 
			m_player.Play(m_playList.GetCur(i)); 
				m_vol.SetRange(0,1000); 
			m_state.SetRange(0,m_player.state.total); 
		} 
	m_play.SetWindowText("暂停"); 
	} 
	else if(m_player.state.ps==Playing) 
	{ 
		m_player.Pause(); 
		m_play.SetWindowText("播放"); 
	} 
	SetButtonState(); 
} 
 
void CMediaPlayerDlg::OnNMReleasedcaptureState(NMHDR *pNMHDR, LRESULT *pResult) 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	m_player.state.cur=m_state.GetPos(); 
	if(m_player.state.ps==Playing) 
	m_player.PlayFromState(); 
	*pResult = 0; 
} 
 
LRESULT CMediaPlayerDlg::ShowPos(WPARAM wParam, LPARAM lParam) 
{ 
	if(!m_state.m_busy) 
	m_state.SetPos(wParam); 
	return LRESULT(); 
} 
LRESULT CMediaPlayerDlg::Next(WPARAM wParam, LPARAM lParam) 
{ 
	int ti=	fileList.GetCurSel(); 
	if(m_player.state.order==0) 
	{ 
	ti=ti+1; 
	ti%=fileList.GetCount(); 
	fileList.SetCurSel(ti); 
	} 
	else if(m_player.state.order==1) 
	{ 
		ti=rand()%fileList.GetCount(); 
		fileList.SetCurSel(ti); 
	} 
	this->OnBnClickedPlay(); 
	return LRESULT(); 
} 
 
LRESULT CMediaPlayerDlg::Finish(WPARAM wParam, LPARAM lParam) 
{ 
	if(m_player.state.order==2) 
	{ 
	m_player.state.cur=0; 
	m_player.PlayFromState(); 
	} 
	else 
	{ 
		Next(0,0); 
	} 
	SetButtonState(); 
	 
	return LRESULT(); 
} 
 
void CMediaPlayerDlg::OnBnClickedStop() 
{ 
 m_player.Stop(); 
 m_play.SetWindowText("播放"); 
 SetButtonState(); 
} 
 
void CMediaPlayerDlg::SetButtonState(void) 
{ 
	if(m_player.state.ps==Stopped) 
	{ 
		m_stop.EnableWindow(false); 
		m_play.SetWindowText("播放"); 
	} 
	else 
		m_stop.EnableWindow(true); 
	LONG tl=m_player.GetVolume(); 
	m_vol.SetPos(tl); 
	if(fileList.GetCount()>0) 
	{ 
		m_form.EnableWindow(); 
		m_next.EnableWindow(); 
	} 
	else 
	{ 
		m_form.EnableWindow(false); 
		m_next.EnableWindow(false); 
	} 
} 
 
void CMediaPlayerDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
{ 
	CMenu menu; 
	menu.LoadMenu(IDR_MAIN_MENU); 
	if(m_player.KeepRate) 
	menu.GetSubMenu(0)->AppendMenu(MF_CHECKED|MF_STRING,ID_RATE,"保持纵横比"); 
	else 
		menu.GetSubMenu(0)->AppendMenu(MF_STRING,ID_RATE,"保持纵横比"); 
	menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTBUTTON|TPM_RIGHTBUTTON,point.x,point.y,this); 
	 
	/*menu.CreatePopupMenu(); 
	if(m_player.KeepRate) 
	menu.AppendMenu(MF_CHECKED|MF_STRING,ID_RATE,"保持纵横比"); 
	else 
		menu.AppendMenu(MF_STRING,ID_RATE,"保持纵横比"); 
	menu.TrackPopupMenu(TPM_LEFTBUTTON|TPM_RIGHTBUTTON,point.x,point.y,pWnd);*/ 
} 
 
void CMediaPlayerDlg::OnNMReleasedcaptureVol(NMHDR *pNMHDR, LRESULT *pResult) 
{ 
	LONG tl=m_vol.GetPos(); 
	TRACE("select pos is:%d\n",m_vol.GetPos()); 
	LONG it=m_player.SetVolumn(tl); 
	it=m_player.GetVolume(); 
	*pResult = 0; 
} 
 
void CMediaPlayerDlg::OnRate() 
{ 
	m_player.KeepRate=1-m_player.KeepRate; 
	m_player.ModifyWindow(); 
} 
 
void CMediaPlayerDlg::OnOpen() 
{ 
	char*   pc   =   new   char[NAMEBUF];  
	static char szFilter[]="Audio(*.mp3;*.wav;*.mid)|*.mp3;*.wav;*.mid|Video(*.avi;*.mpg;*.wmv)|*.avi;*.mpg;*.wmv;|Picture(*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif|AllSupport|*.mp3;*.wav;*.mid;*.avi;*.mpg;*.wmv;*.bmp;*.jpg;*.gif||"; 
	CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT| OFN_ENABLESIZING,szFilter); 
	dlg.m_ofn.lpstrFile   =pc; 
	dlg.m_ofn.nMaxFile   =  NAMEBUF;  
	dlg.m_ofn.lpstrFile[0]   =   NULL;    
 
	if(dlg.DoModal()==IDOK) 
	{ 
		m_playList.Reset(); 
		POSITION ps=dlg.GetStartPosition(); 
		if(ps==NULL) 
			return; 
		CString ts; 
		int count; 
		while(ps!=NULL) 
		{ 
			count=m_playList.AddFile(dlg.GetNextPathName(ps)); 
		} 
		//TRACE("%d\n",count); 
		fileList.ResetContent(); 
		POSITION pt=m_playList.fileList.GetHeadPosition(); 
		while(pt!=NULL) 
		{ 
			fileList.AddString(((PlayNode)m_playList.fileList.GetNext(pt)).fileName); 
		} 
		fileList.SetCurSel(0); 
	} 
	 delete [] pc; 
 
} 
 
void CMediaPlayerDlg::OnExit() 
{ 
	m_player.DestroyWindow(); 
	OnOK(); 
} 
 
void CMediaPlayerDlg::OnLbnDblclkList2() 
{ 
	OnBnClickedStop(); 
	OnBnClickedPlay(); 
} 
 
void CMediaPlayerDlg::OnBnClickedNext() 
{ 
	OnBnClickedStop(); 
Next(0,0); 
	 
	/*int i=fileList.GetCurSel(); 
	m_player.PlayNew(m_playList.GetCur(i)); 
	m_vol.SetRange(0,1000); 
	m_state.SetRange(0,m_player.state.total);*/ 
	 
	SetButtonState(); 
} 
 
void CMediaPlayerDlg::OnBnClickedForm() 
{ 
	int ti=	fileList.GetCurSel(); 
	if(m_player.state.order==0) 
	{ 
		ti=ti-1; 
		if(ti<0) 
			ti=fileList.GetCount()-1; 
		else 
			ti%=fileList.GetCount(); 
		fileList.SetCurSel(ti); 
	} 
	else if(m_player.state.order==1) 
	{ 
		ti=rand()%fileList.GetCount(); 
		fileList.SetCurSel(ti); 
	} 
	OnBnClickedStop(); 
	OnBnClickedPlay(); 
} 
 
void CMediaPlayerDlg::OnStnClickedPciture1() 
{ 
	m_player.state.order+=1; 
	m_player.state.order%=3; 
	static_bmp.DeleteObject(); 
	switch(m_player.state.order) 
	{ 
	case 0: 
		static_bmp.LoadBitmap(IDB_BITMAP1); 
		break; 
	case 1: 
		static_bmp.LoadBitmap(IDB_BITMAP2); 
		break; 
	case 2: 
		static_bmp.LoadBitmap(IDB_BITMAP3); 
		break; 
	} 
	m_picture.SetBitmap((HBITMAP)static_bmp); 
	 
} 
 
BOOL CMediaPlayerDlg::OnEraseBkgnd(CDC* pDC) 
{ 
	// TODO: 在此添加消息处理程序代码和/或调用默认值 
/*	CRect rect; 
	this->GetClientRect(rect); 
	HBITMAP hBmp=(HBITMAP)LoadImage(NULL,skin,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);  
	CDC     memDC; 
	CBitmap	bitmap; 
	BITMAP  bmp; 
	bitmap.Attach(hBmp); 
	bitmap.GetObject (sizeof(BITMAP),&bmp); 
	memDC.CreateCompatibleDC (pDC); 
	memDC.SelectObject (bitmap); 
	pDC->SetStretchBltMode(STRETCH_DELETESCANS); 
	pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
	return 1;*/ 
	CRect rect; 
	this->GetClientRect(rect); 
	 
	if(memDC.m_hDC==NULL){ 
		memDC.CreateCompatibleDC (pDC); 
		HBITMAP hBmp=(HBITMAP)LoadImage(NULL,skin,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);  
		if(hBmp==NULL) 
		return CDialog::OnEraseBkgnd(pDC); 
		bitmap.Attach(hBmp); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.SelectObject (bitmap); 
	} 
	pDC->SetStretchBltMode(STRETCH_DELETESCANS); 
	pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
	return 1; 
	//return CDialog::OnEraseBkgnd(pDC); 
} 
 
void CMediaPlayerDlg::OnMouseMove(UINT nFlags, CPoint point) 
{ 
	// TODO: 在此添加消息处理程序代码和/或调用默认值 
 
	//m_play.AutoLoad(IDC_PLAY,this); 
	CDialog::OnMouseMove(nFlags, point); 
} 
 
HBRUSH CMediaPlayerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
	return hbr; 
} 
 
void CMediaPlayerDlg::OnSkin() 
{ 
	static char szFilter[]="BMP(*.bmp)|*.bmp|"; 
	CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT| OFN_ENABLESIZING,szFilter); 
	if(dlg.DoModal()==IDOK) 
	{ 
		//CDC *pDC=GetDC(); 
		skin=dlg.GetPathName(); 
		 
		HBITMAP hBmp=(HBITMAP)LoadImage(NULL,skin,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);  
		bitmap.DeleteObject(); 
		bitmap.Attach(hBmp); 
		bitmap.GetObject (sizeof(BITMAP),&bmp); 
		memDC.SelectObject (bitmap); 
		m_play.ReSet(); 
		m_form.ReSet(); 
		m_next.ReSet(); 
		m_stop.ReSet(); 
		//this->RedrawWindow(); 
		//m_vol.DrawTransparent(0); 
		//m_state.DrawTransparent(0); 
		// 
		m_state.DrawTransparent(1); 
		m_vol.DrawTransparent(1); 
		fileList.ReSet(); 
		Invalidate(); 
		//this->UpdateWindow(); 
		//this->Invalidate();m_play.Refresh(); 
		 
	} 
} 
 
void CMediaPlayerDlg::OnDel() 
{ 
	int i=fileList.GetCurSel(); 
	if(i<0) 
		return; 
	else 
	{ 
		m_playList.Del(i); 
		fileList.DeleteString(i); 
	} 
} 
 
void CMediaPlayerDlg::OnAdd() 
{ 
	char*   pc   =   new   char[NAMEBUF];  
	static char szFilter[]="Audio(*.mp3;*.wav;*.mid)|*.mp3;*.wav;*.mid|Video(*.avi;*.mpg;*.wmv)|*.avi;*.mpg;*.wmv;|Picture(*.bmp;*.jpg;*.gif)|*.bmp;*.jpg;*.gif|AllSupport|*.mp3;*.wav;*.mid;*.avi;*.mpg;*.wmv;*.bmp;*.jpg;*.gif||"; 
	CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT| OFN_ENABLESIZING,szFilter); 
	dlg.m_ofn.lpstrFile   =pc; 
	dlg.m_ofn.nMaxFile   =  NAMEBUF;  
	dlg.m_ofn.lpstrFile[0]   =   NULL;    
 
	if(dlg.DoModal()==IDOK) 
	{ 
		//m_playList.Reset(); 
		POSITION ps=dlg.GetStartPosition(); 
		if(ps==NULL) 
			return; 
		CString ts; 
		int count; 
		while(ps!=NULL) 
		{ 
			count=m_playList.AddFile(dlg.GetNextPathName(ps)); 
		} 
		TRACE("%d\n",count); 
		fileList.ResetContent(); 
		POSITION pt=m_playList.fileList.GetHeadPosition(); 
		while(pt!=NULL) 
		{ 
			fileList.AddString(((PlayNode)m_playList.fileList.GetNext(pt)).fileName); 
		} 
		fileList.SetCurSel(0); 
	} 
	 delete [] pc; 
}