www.pudn.com > PLAYMP3.rar > OpenFileDlg.cpp
// 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;kkLoadBitmap ( 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 ) ;
//将图片COPY到指定的像素位置
dc.BitBlt ( m_rect[4].TopLeft().x, m_rect[4].TopLeft().y, 55, 55, &memDC, 0, 0, SRCCOPY ) ;
}
memDC.SelectObject ( pOldBitmap ) ;
//释放bitmap对象内存
delete pBitmap ;
//分配bitmap对象内存
////////////////
memDC.DeleteDC () ;
}
void COpenFileDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
DrawInterface(dc);
}
void COpenFileDlg::SetToolRectangle()
{
m_rect[0].SetRect(403,65,403+51,65+25);
m_rect[1].SetRect(403,95,403+51,95+25);
m_rect[2].SetRect(403,125,403+51,125+25);
m_rect[3].SetRect(403,155,403+51,155+25);
m_rect[4].SetRect(403,185,403+51,185+25);
}
void COpenFileDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_prePick = m_currentPick ;
for ( int i = 0 ; i < 5 ; i ++ )
{
if ( m_rect[i].PtInRect (point) )
{
{
CDC* pDC = GetDC () ;
CDC memDC ;
memDC.CreateCompatibleDC ( pDC ) ;
CBitmap bmp ;
switch ( m_prePick )
{
case 0:
{//白
bmp.LoadBitmap ( IDB_OPEN_UP_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(),
m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 1:
{
bmp.LoadBitmap ( IDB_OPEN_DOWN_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(),
m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 2:
{
bmp.LoadBitmap ( IDB_OPEN_ALL_W ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(),
m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 3:
{
bmp.LoadBitmap ( IDB_OPEN_ADD_W ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(),
m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 4:
{
bmp.LoadBitmap ( IDB_OPEN_CANCEL_W ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp ) ;
pDC->BitBlt ( m_rect[m_prePick].TopLeft().x, m_rect[m_prePick].TopLeft().y, m_rect[m_prePick].Width(),
m_rect[m_prePick].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
}
CBitmap bmp1 ;
switch ( i )
{
case 0:
{
//load the bitmap
//黑
bmp1.LoadBitmap ( IDB_OPEN_UP_W ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 1:
{
//load the bitmap
bmp1.LoadBitmap ( IDB_OPEN_DOWN_W) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 2:
{
//load the bitmap
bmp1.LoadBitmap ( IDB_OPEN_ALL_B) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 3:
{
//load the bitmap
//黑
bmp1.LoadBitmap ( IDB_OPEN_ADD_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
case 4:
{
//load the bitmap
//黑
bmp1.LoadBitmap ( IDB_OPEN_CANCEL_B ) ;
CBitmap* pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
break ;
}
}
memDC.DeleteDC () ;
ReleaseDC ( pDC ) ;
m_currentPick = i ;
}
}
}
CDialog::OnLButtonDown(nFlags, point);
}
void COpenFileDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CopyBMP(IDB_OPEN_UP_B,0);
CopyBMP(IDB_OPEN_DOWN_B,1);
CopyBMP(IDB_OPEN_ALL_W,2);
CopyBMP(IDB_OPEN_ADD_W,3);
CopyBMP(IDB_OPEN_CANCEL_W,4);
int cou = m_ListCtrl.GetItemCount();
int pp = 0;//设定上下移。
m_bIsExecute = FALSE ;
for ( int i = 0 ; i < 5 ; i ++ )
{
if ( m_rect[i].PtInRect (point) )
{
if ( m_currentPick == i)
{
m_bIsExecute =TRUE ;
switch (i)
{
case 0:
if (bei == 0)
{
break;
}
bei--;
pp = bei * 8;
m_ListCtrl.EnsureVisible(pp, FALSE);
break ;
case 1:
if (bei > (cou / 8) )
{
break;
}
bei++;
pp = bei * 8;
if (pp > cou)
{
pp = cou - 1 ;
}
m_ListCtrl.EnsureVisible(pp, FALSE);
break;
case 2:
BtnAll();
break ;
case 3:
BtnOK();
break ;
case 4:
BtnCancel();
break ;
default:
break ;
}
}
}
}
CDialog::OnLButtonUp(nFlags, point);
}
void COpenFileDlg::CopyBMP(int m_map, int i)
{
CDC* pDC = GetDC () ;
CDC memDC ;
memDC.CreateCompatibleDC ( pDC ) ;
CBitmap bmp,bmp1 ;
CBitmap* pOldBitmap ;
bmp1.LoadBitmap ( m_map) ;
pOldBitmap = memDC.SelectObject ( &bmp1 ) ;
pDC->BitBlt ( m_rect[i].TopLeft().x, m_rect[i].TopLeft().y, m_rect[i].Width(),
m_rect[i].Height(), &memDC, 0, 0, SRCCOPY ) ;
memDC.SelectObject ( pOldBitmap ) ;
memDC.DeleteDC () ;
ReleaseDC ( pDC ) ;
}
void COpenFileDlg::BtnAll()
{
UINT nCount = m_ListCtrl.GetItemCount();
for(UINT i = 0;i < nCount;i++)
{
m_ListCtrl.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
}
}
void COpenFileDlg::BtnCancel()
{
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0);
CDialog::OnCancel();
}
void COpenFileDlg::BtnOK()
{
//松开ctrl
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0);
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();
}
void COpenFileDlg::OnClickListctrl(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
// CString str = "";
keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);
// POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
// if (pos == NULL)
// return;
// else
// {
// while (pos)
// {
// int nItem = m_ListCtrl.GetNextSelectedItem(pos);
// }
// }
*pResult = 0;
}
void COpenFileDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
HWND hwnd;
hwnd = ::FindWindow(TEXT("PLAY"),NULL);
if(hwnd!=NULL)
{
::SendMessage(hwnd,WM_CLOSE,0,0);
}
CDialog::OnClose();
}
bool COpenFileDlg::CheckWma(CString _temp1)
{
/*
//以下四行,为WMA文件头前16个字节
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));
CString strWmaHead = cBuffer;//得到标准的WMA前字节字符串。
*/
//////////////////////////////////////////////////////////////////
CString strname1;
strname1.Format(strPath + L"mp3\\%s",_temp1);
////////////////////以下十行为读WMA文件头。
CFile file11;
if(!file11.Open(strname1,CFile::modeRead))
{
return false; //文件无法打开
}
long seekPos11 = 0;
file11.Seek(seekPos11,CFile::begin);
BYTE pbuf11[16];
memset(pbuf11,0,16);
file11.Read(pbuf11,16);
///////////////////////////////////////////
CString _strWMa = "";
_strWMa = pbuf11;
if (_strWMa == strWmaHead )
{
file11.Close();
return true;
}
else
{
file11.Close();
return false;
}
return true;
}
void COpenFileDlg::OnOK()
{
}
LRESULT COpenFileDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if (message == HIDEOPENMP3)
{
CDialog::OnCancel();
}
return CDialog::WindowProc(message, wParam, lParam);
}