⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 openfiledlg.cpp

📁 WinCE 简单的播放器。MFC写的。以前在PUDN上找到的。怕丢了重新上传下。支持WMA WAV MP3,支持LRC 播放
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// OpenFileDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PLAYMP3.h"
#include "OpenFileDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


CString strPath = "\\sdmmc\\";

/////////////////////////////////////////////////////////////////////////////
// COpenFileDlg dialog


COpenFileDlg::COpenFileDlg(CWnd* pParent /*=NULL*/)
	: CDialog(COpenFileDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(COpenFileDlg)
	_tempStrPath = "";
	//}}AFX_DATA_INIT
}


void COpenFileDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COpenFileDlg)
	DDX_Control(pDX, IDC_LISTCTRL, m_ListCtrl);
//	DDX_Text(pDX, IDC_EDIT1, m_temp);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COpenFileDlg, CDialog)
	//{{AFX_MSG_MAP(COpenFileDlg)
	ON_WM_ERASEBKGND()
	ON_BN_CLICKED(IDC_UP, OnUp)
	ON_NOTIFY(NM_DBLCLK, IDC_LISTCTRL, OnDblclkListctrl)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_NOTIFY(NM_CLICK, IDC_LISTCTRL, OnClickListctrl)
	ON_BN_CLICKED(IDC_BUTTON1, OnOK)
	ON_BN_CLICKED(IDC_OK, OnOK)
	ON_BN_CLICKED(IDC_BUTTON2, OnCancel)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COpenFileDlg message handlers

BOOL COpenFileDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here
	m_Left=0;
	m_Top=0;
	m_Width=480;
	n_list_i = 0;
	m_Height=272;
	bei = 0;
	n_ListPage = 1 ;
	
	
	::SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST,m_Left, m_Top, 
	m_Width, m_Height,SWP_SHOWWINDOW);



//	m_ListCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES);
	
	m_BackScreenBitmap.LoadBitmap(IDB_OPEN_BKG);

	m_imagelist.Create(32,32,TRUE,2,2);

	SetToolRectangle();
	
	m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_MP3));

	CenterWindow(GetDesktopWindow());
	
	m_prePick=-1;
	m_currentPick=0;
	m_bIsExecute=FALSE ;
	

	m_ListCtrl.MoveWindow(40,55,344,165);


	BYTE m_Byte[16]={0x30,0x26,0xB2,0x75,0x8E,0x66,0xCF,0x11,0xA6,0xD9, 0x00 ,0xAA ,0x00 ,0x62 ,0xCE ,0x6C};//wma文件头。
	char cBuffer[100];
	memcpy(cBuffer,m_Byte,sizeof(m_Byte));
	strWmaHead = cBuffer;//得到标准的WMA前字节字符串。

	
	count = 0;
	bool bFinished = false;
	hSearch = FindFirstFile(strPath + L"mp3\\*.wma",&FileData);

	if (hSearch != INVALID_HANDLE_VALUE)//找到
		while (!bFinished)
		{
			if(CheckWma(FileData.cFileName))//有效MP3文件,则向LIST中 添加文件
			{
				m_ListCtrl.InsertItem(n_list_i,FileData.cFileName);
			}
			if (!FindNextFile(hSearch ,&FileData))
			{
				bFinished = true;
			}
			
		}
//查找wma	
	bFinished = false;
	hSearch = FindFirstFile(strPath + L"mp3\\*.mp3",&FileData);
	if (hSearch != INVALID_HANDLE_VALUE)
		while (!bFinished)
		{
			if(CheckMp3(FileData.cFileName))//有效MP3文件,则向LIST中 添加文件
			{
				m_ListCtrl.InsertItem(n_list_i,FileData.cFileName);
			}
			if (!FindNextFile(hSearch ,&FileData))
			{
				bFinished = true;
			}
			
		}
		
	
	m_ListCtrl.SetImageList(&m_imagelist,LVSIL_NORMAL);
	m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
	m_ListCtrl.SetBkColor(RGB(0,0,0));
	m_ListCtrl.SetTextColor(RGB(255,255,255));
	m_ListCtrl.SetTextBkColor(RGB(0,0,0));
//	m_ListCtrl.SetIconSpacing(0,0);
	
		
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE

}
/*

void COpenFileDlg::OnOK() 
{

	CString str = "";

	POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
	if (pos == NULL)
		return;
	else
	{
	 while (pos)
	 {
      int nItem = m_ListCtrl.GetNextSelectedItem(pos);
	 str = m_ListCtrl.GetItemText(nItem,0);
	  array_str.Add(str);
		}
	}




//list多选
/ *
	int count1;
	CString str;		
    int n = 0;
	count = m_list.GetSelCount();

	if (count < 1) //如何没有选中文件,则不退出
	{
		return;
	}
	int * m_Name = new int[count];
	m_list.GetSelItems(count,m_Name);
	

	for (int i=0;i < count;i++)
	{
		count1 = 0;
		n = m_list.GetTextLen( m_Name[i] );
		m_list.GetText( m_Name[i], str.GetBuffer(n) );

		array_str.Add(str);

		str.ReleaseBuffer(0);
	}
	delete[]m_Name;
* /

	CDialog::OnOK();
}

*/


BOOL COpenFileDlg::OnEraseBkgnd(CDC* pDC) 
{
	BITMAP bmpInfo;
	m_BackScreenBitmap.GetBitmap(&bmpInfo);
	CDC dcMemory;
	dcMemory.CreateCompatibleDC(pDC);
	CBitmap* pOldBitmap = dcMemory.SelectObject(&m_BackScreenBitmap);
	CRect rect;
	GetClientRect(&rect);
	pDC->BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 
		0, 0, SRCCOPY);
	dcMemory.SelectObject(pOldBitmap);
		
			
	return TRUE;
}
/*

void COpenFileDlg::OnCancel() 
{
//	m_list.ResetContent();
	CDialog::OnCancel();
}
*/

BOOL COpenFileDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class

	for(int kk=0;kk<m_imagelist.GetImageCount();kk++)
  m_imagelist.Remove(kk);

//	m_list.ResetContent();
	FindClose(hSearch);
	
	return CDialog::DestroyWindow();
}

bool COpenFileDlg::CheckMp3(CString _temp)
{
	
	CString strname1;
	strname1.Format(strPath + L"mp3\\%s",_temp);

	//如果是wma文则跳过,因为这段我没有做出来。
	
	///////////
	CFile file;
	
	if(!file.Open(strname1,CFile::modeRead))
	{
	//	AfxMessageBox(L"Can not open file.");
		return false; //文件无法打开
	}

	//把文件的最后128字节信息读给pbuf数组
	long seekPos = 128;
	file.Seek(-seekPos,CFile::end);
	BYTE pbuf1[3];
	memset(pbuf1,0,3);

	file.Read(pbuf1,3);

	//获得tag,如果不是tag,那么就返回
	if(!((pbuf1[0] == 'T'|| pbuf1[0] == 't')
		&&(pbuf1[1] == 'A'|| pbuf1[1] == 'a')
		&&(pbuf1[2] == 'G'|| pbuf1[0] == 'g')))
	{
		file.Close();
		return false;;
	}
	else
	{
		file.Close();
		return true;
	}
		


	return true;
}
/*

void COpenFileDlg::OnBtnAll() 
{

	UINT nCount = m_ListCtrl.GetItemCount();   
    for(UINT i = 0;i < nCount;i++)   
	{   
		m_ListCtrl.SetItemState(i,   LVIS_SELECTED,   LVIS_SELECTED);   
	}

}
*/

void COpenFileDlg::OnUp() 
{



}


void COpenFileDlg::OnDblclkListctrl(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CString str = "";
	POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
    int nItem = m_ListCtrl.GetNextSelectedItem(pos);
	str = m_ListCtrl.GetItemText(nItem,0);
	if (str == "")
	{
		return;
	}
	array_str.Add(str);
	*pResult = 0;

	keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0); 

	CDialog::OnOK();

}

void COpenFileDlg::DrawInterface(CDC &dc)
{
	CDC  memDC ;
	memDC.CreateCompatibleDC ( &dc ) ;
	
	
	CBitmap*  pBitmap ;		//load all bitmap
	CBitmap*  pOldBitmap ;	//save old bitmap temp
	
	


	//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if (m_NavRefresh ||  m_currentPick == 0)
	{
	//黑
		pBitmap ->LoadBitmap ( IDB_OPEN_UP_W ) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[0].TopLeft().x, m_rect[0].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		//白
		pBitmap ->LoadBitmap ( IDB_OPEN_UP_B) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[0].TopLeft().x, m_rect[0].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}
	
	
	memDC.SelectObject ( pOldBitmap ) ;
	
	//释放bitmap对象内存
	delete pBitmap ;
	//////////////////////////////////////////////
	//.............................................................
	//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if ( m_currentPick == 1 )
	{
	pBitmap ->LoadBitmap ( IDB_OPEN_DOWN_W ) ;
	pOldBitmap = memDC.SelectObject ( pBitmap ) ;
	
	//将图片COPY到指定的像素位置
	dc.BitBlt ( m_rect[1].TopLeft().x, m_rect[1].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		
		pBitmap ->LoadBitmap ( IDB_OPEN_DOWN_B) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[1].TopLeft().x, m_rect[1].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}

	
	memDC.SelectObject ( pOldBitmap ) ;
	
	//释放bitmap对象内存
	delete pBitmap ;
	
	//...............................................................
	//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if ( m_currentPick == 2 )
	{
	pBitmap ->LoadBitmap ( IDB_OPEN_ALL_B ) ;
	pOldBitmap = memDC.SelectObject ( pBitmap ) ;
	
	//将图片COPY到指定的像素位置
	dc.BitBlt ( m_rect[2].TopLeft().x, m_rect[2].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		
		pBitmap ->LoadBitmap ( IDB_OPEN_ALL_W ) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[2].TopLeft().x, m_rect[2].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}
	
	memDC.SelectObject ( pOldBitmap ) ;
	
	//释放bitmap对象内存
	delete pBitmap ;
	

		//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if ( m_currentPick == 3 )
	{
	pBitmap ->LoadBitmap ( IDB_OPEN_ADD_B ) ;
	pOldBitmap = memDC.SelectObject ( pBitmap ) ;
	
	//将图片COPY到指定的像素位置
	dc.BitBlt ( m_rect[3].TopLeft().x, m_rect[3].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		
		pBitmap ->LoadBitmap ( IDB_OPEN_ADD_W) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		
		//将图片COPY到指定的像素位置
		dc.BitBlt ( m_rect[3].TopLeft().x, m_rect[3].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}

	
	memDC.SelectObject ( pOldBitmap ) ;
	
	//释放bitmap对象内存
	delete pBitmap ;
		//分配bitmap对象内存
	pBitmap = new CBitmap ;
	
	if ( m_currentPick == 4 )
	{
	pBitmap ->LoadBitmap ( IDB_OPEN_CANCEL_B ) ;
	pOldBitmap = memDC.SelectObject ( pBitmap ) ;
	
	//将图片COPY到指定的像素位置
	dc.BitBlt ( m_rect[4].TopLeft().x, m_rect[4].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
	}
	else
	{		
		pBitmap ->LoadBitmap ( IDB_OPEN_CANCEL_W) ;
		pOldBitmap = memDC.SelectObject ( pBitmap ) ;
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -