gps/GPSProject/ImageViewer/OpenImageFileDlg.cpp

722 lines
18 KiB
C++
Executable File

// OpenImageFileDlg.cpp : implementation file
//
#include "stdafx.h"
#include "imageviewer.h"
#include "OpenImageFileDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// COpenImageFileDlg dialog
COpenImageFileDlg::COpenImageFileDlg(CWnd* pParent /*=NULL*/)
: CDialog(COpenImageFileDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(COpenImageFileDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// 初始化背景画刷
CBitmap tmpBmp;
// 从资源中加载背景图片
tmpBmp.LoadBitmap(IDB_FILEVIEW_WND);
m_BgDC.CreateCompatibleDC(NULL);
m_BgDC.SelectObject(&tmpBmp);
tmpBmp.DeleteObject();
m_txtFont.CreateFont(12,0,0,0,FW_BOLD,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Arial"));
m_NumberDir = 0; // 当前目录下目录总数
m_CurrentPossion = 0; // 当前位置
// 根目录路径
m_FilePath = L"\\Storage Card";
m_File.Empty();
}
COpenImageFileDlg::~COpenImageFileDlg()
{
m_BgDC.DeleteDC();
m_txtFont.DeleteObject();
}
void COpenImageFileDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COpenImageFileDlg)
DDX_Control(pDX, IDC_BUTTON_UP, m_butUp);
DDX_Control(pDX, IDC_BUTTON_PLAY, m_butPlay);
DDX_Control(pDX, IDC_BUTTON_FILEBACK, m_butBack);
DDX_Control(pDX, IDC_BUTTON_EXIT, m_butExit);
DDX_Control(pDX, IDC_BUTTON_Down, m_butDown);
DDX_Control(pDX, IDC_BUTTON6, m_lab6);
DDX_Control(pDX, IDC_BUTTON5, m_lab5);
DDX_Control(pDX, IDC_BUTTON4, m_lab4);
DDX_Control(pDX, IDC_BUTTON3, m_lab3);
DDX_Control(pDX, IDC_BUTTON2, m_lab2);
DDX_Control(pDX, IDC_BUTTON1, m_lab1);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COpenImageFileDlg, CDialog)
//{{AFX_MSG_MAP(COpenImageFileDlg)
ON_WM_ERASEBKGND()
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTON_Down, OnBUTTONDown)
ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)
ON_BN_CLICKED(IDC_BUTTON_FILEBACK, OnButtonFileback)
ON_BN_CLICKED(IDC_BUTTON_PLAY, OnButtonPlay)
ON_BN_CLICKED(IDC_BUTTON_UP, OnButtonUp)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
ON_WM_COPYDATA()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COpenImageFileDlg message handlers
BOOL COpenImageFileDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
// 设置窗口大小
MoveWindow(0,0,320,240);
m_butExit.MoveWindow(285,8,25,25);
m_butExit.LoadBitmaps(IDB_FILEVIEW_CLOSE,IDB_FILEVIEW_CLOSED);
m_butUp.MoveWindow(271,37,46,46);
m_butUp.LoadBitmaps(IDB_FILEVIEW_UP,IDB_FILEVIEW_UPD,IDB_FILEVIEW_UPDIS);
m_butUp.EnableWindow(FALSE);
m_butDown.MoveWindow(271,87,46,46);
m_butDown.LoadBitmaps(IDB_FILEVIEW_DOWN,IDB_FILEVIEW_DOWND,IDB_FILEVIEW_DOWNDIS);
m_butDown.EnableWindow(FALSE);
m_butBack.MoveWindow(271,137,46,46);
m_butBack.LoadBitmaps(IDB_FILEVIEW_BACK,IDB_FILEVIEW_BACKD,IDB_FILEVIEW_BACKDIS);
m_butPlay.MoveWindow(271,187,46,46);
m_butPlay.LoadBitmaps(IDB_FILEVIEW_PLAY,IDB_FILEVIEW_PLAYD,IDB_FILEVIEW_PLAYDIS);
m_butPlay.EnableWindow(FALSE);
m_lab1.MoveWindow(24,51,60,80);
m_lab1.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(0,0,0));
m_lab2.MoveWindow(107,51,60,80);
m_lab2.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(0,0,0));
m_lab3.MoveWindow(189,51,60,80);
m_lab3.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(0,0,0));
m_lab4.MoveWindow(24,134,60,80);
m_lab4.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(0,0,0));
m_lab5.MoveWindow(107,134,60,80);
m_lab5.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(0,0,0));
m_lab6.MoveWindow(189,134,60,80);
m_lab6.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(0,0,0));
ScanFile();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL COpenImageFileDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
//return CDialog::OnEraseBkgnd(pDC);
}
void COpenImageFileDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
dc.BitBlt(0,0,320,240,&m_BgDC,0,0,SRCCOPY);
dc.SelectObject(&m_txtFont);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,255,255));
dc.DrawText(m_FilePath,CRect(43,4,320,32),DT_LEFT|DT_VCENTER);
// Do not call CDialog::OnPaint() for painting messages
}
void COpenImageFileDlg::ScanFile()
{
CString sSearchFile = m_FilePath + _T("\\*.*");
CString sFileName;
CStringArray tmpDir;
CStringArray tmpFile;
int i = 0;
tmpDir.RemoveAll();
tmpFile.RemoveAll();
m_FileNames.RemoveAll();
WIN32_FIND_DATA fd; // 查找文件信息
// 查找文件
HANDLE hFindFile = FindFirstFile(sSearchFile,&fd);
if(hFindFile != INVALID_HANDLE_VALUE)
{
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if (IsAvailabFormat(fd.cFileName))
{
tmpFile.Add(fd.cFileName);
}
}
else
{
tmpDir.Add(fd.cFileName);
}
while(FindNextFile(hFindFile,&fd) != 0)
{
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if (IsAvailabFormat(fd.cFileName))
{
tmpFile.Add(fd.cFileName);
}
}
else
{
tmpDir.Add(fd.cFileName);
}
}
// 关闭句柄
FindClose(hFindFile);
if (tmpFile.GetUpperBound() >= 1)
{
m_butPlay.EnableWindow(TRUE);
}
else
{
m_butPlay.EnableWindow(FALSE);
}
m_NumberDir = tmpDir.GetUpperBound() + 1;
tmpDir.Append(tmpFile);
m_FileNames.Append(tmpDir);
}
InvalidateRect(CRect(43,4,320,32));
ShowFiles(0);
}
bool COpenImageFileDlg::IsAvailabFormat(CString strFileName)
{
strFileName.MakeLower();
int iStart = 0;
int iEnd = 2;
CString SupportFormat[3];
// 音乐文件
SupportFormat[0] = _T("bmp");
SupportFormat[1] = _T("jpg");
SupportFormat[2] = _T("jpeg");
CString FileExt;
FileExt.Empty();
// 文件名长度
int strLen = strFileName.GetLength() - 1;
for(int i = strLen; i >= 0; i--)
{
// 查找文件名中最好一个'.'
if(strFileName.GetAt(i) == '.')
{
// 提取文件扩展名
FileExt = strFileName.Right(strLen - i);
break;
}
}
// 判断扩展名是否符合要求
if(!FileExt.IsEmpty())
{
for(i = iStart; i <= iEnd; i++)
{
if(FileExt == SupportFormat[i])
{
return true;
}
}
return false;
}
else
{
return false;
}
}
void COpenImageFileDlg::ShowFiles(int iStart)
{
m_lab1.ShowIcon(false);
m_lab2.ShowIcon(false);
m_lab3.ShowIcon(false);
m_lab4.ShowIcon(false);
m_lab5.ShowIcon(false);
m_lab6.ShowIcon(false);
int totalFile = m_FileNames.GetUpperBound() + 1;
if (iStart < totalFile)
{
if (totalFile - iStart >= 6)
{
if (iStart < m_NumberDir)
{
m_lab1.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab1.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab1.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
if (iStart < m_NumberDir)
{
m_lab2.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab2.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab2.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
if (iStart < m_NumberDir)
{
m_lab3.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab3.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab3.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
if (iStart < m_NumberDir)
{
m_lab4.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab4.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab4.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
if (iStart < m_NumberDir)
{
m_lab5.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab5.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab5.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
if (iStart < m_NumberDir)
{
m_lab6.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab6.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab6.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
m_CurrentPossion = iStart;
m_lab1.ShowIcon(true);
m_lab2.ShowIcon(true);
m_lab3.ShowIcon(true);
m_lab4.ShowIcon(true);
m_lab5.ShowIcon(true);
m_lab6.ShowIcon(true);
m_butDown.EnableWindow(TRUE);
if (m_CurrentPossion == totalFile)
{
m_butDown.EnableWindow(FALSE);
}
else
{
m_butDown.EnableWindow(TRUE);
}
}
else
{
if (iStart < m_NumberDir)
{
m_lab1.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab1.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab1.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
m_lab1.ShowIcon(true);
if (iStart < totalFile)
{
if (iStart < m_NumberDir)
{
m_lab2.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab2.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab2.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
m_lab2.ShowIcon(true);
}
if (iStart < totalFile)
{
if (iStart < m_NumberDir)
{
m_lab3.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab3.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab3.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
m_lab3.ShowIcon(true);
}
if (iStart < totalFile)
{
if (iStart < m_NumberDir)
{
m_lab4.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab4.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab4.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
m_lab4.ShowIcon(true);
}
if (iStart < totalFile)
{
if (iStart < m_NumberDir)
{
m_lab5.LoadIcon(IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,IDB_FILEVIEW_WND,RGB(255,0,0));
}
else
{
m_lab5.LoadIcon(IDB_ICON_IMAGE,IDB_ICON_IMAGED,IDB_FILEVIEW_WND,RGB(255,0,0));
}
m_lab5.SetButtonTitle(m_FileNames.GetAt(iStart));
iStart++;
m_lab5.ShowIcon(true);
}
m_CurrentPossion = iStart;
m_butDown.EnableWindow(FALSE);
}
if (m_CurrentPossion - 6 > 0)
{
m_butUp.EnableWindow(TRUE);
}
else
{
m_butUp.EnableWindow(FALSE);
}
}
else
{
m_butUp.EnableWindow(FALSE);
m_butDown.EnableWindow(FALSE);
}
m_lab1.Invalidate();
m_lab2.Invalidate();
m_lab3.Invalidate();
m_lab4.Invalidate();
m_lab5.Invalidate();
m_lab6.Invalidate();
}
void COpenImageFileDlg::OnBUTTONDown()
{
// TODO: Add your control notification handler code here
ShowFiles(m_CurrentPossion);
}
void COpenImageFileDlg::OnButtonExit()
{
// TODO: Add your control notification handler code here
EndDialog(IDCANCEL);
}
void COpenImageFileDlg::OnButtonFileback()
{
// TODO: Add your control notification handler code here
CString str = m_FilePath;
str.MakeLower();
if (str != L"\\storage card")
{
m_lab1.SetChecked(false);
m_lab2.SetChecked(false);
m_lab3.SetChecked(false);
m_lab4.SetChecked(false);
m_lab5.SetChecked(false);
m_lab6.SetChecked(false);
CString strFileName = m_FilePath;
strFileName.MakeLower();
CString FileExt;
FileExt.Empty();
// 文件名长度
int strLen = strFileName.GetLength() - 1;
for(int i = strLen; i >= 0; i--)
{
// 查找文件名中最好一个'.'
if(strFileName.GetAt(i) == '\\')
{
// 提取文件扩展名
FileExt = strFileName.Left(i);
break;
}
}
m_FilePath = FileExt;
ScanFile();
}
}
void COpenImageFileDlg::OnButtonPlay()
{
// TODO: Add your control notification handler code here
g_Playlist.m_FileList.RemoveAll();
g_Playlist.m_TotalFiles = m_FileNames.GetUpperBound() + 1;
g_Playlist.m_CurrentFile = 0;
g_Playlist.m_FileList.Append(m_FileNames);
g_Playlist.m_FilePath = m_FilePath + L"\\";
EndDialog(IDOK);
}
void COpenImageFileDlg::OnButtonUp()
{
// TODO: Add your control notification handler code here
int tmpPossion = 0;
int tmp = m_FileNames.GetUpperBound();
if (m_CurrentPossion - 12 > 0)
{
if (m_CurrentPossion == m_FileNames.GetUpperBound() + 1)
{
tmp = (m_FileNames.GetUpperBound() + 1) % 6;
tmpPossion = m_CurrentPossion - ((m_FileNames.GetUpperBound() + 1) % 6) - 6;
}
else
{
tmpPossion = m_CurrentPossion - 12;
}
}
else
{
tmpPossion = 0;
}
ShowFiles(tmpPossion);
}
void COpenImageFileDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString sSearchFile = m_FilePath + L"\\" + m_lab1.GetButtonTitle();
WIN32_FIND_DATA fd; // 查找文件信息
// 查找文件
HANDLE hFindFile = FindFirstFile(sSearchFile,&fd);
if(hFindFile != INVALID_HANDLE_VALUE)
{
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
m_FilePath = sSearchFile;
m_lab1.SetChecked(false);
ScanFile();
}
}
}
void COpenImageFileDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CString sSearchFile = m_FilePath + L"\\" + m_lab2.GetButtonTitle();
WIN32_FIND_DATA fd; // 查找文件信息
// 查找文件
HANDLE hFindFile = FindFirstFile(sSearchFile,&fd);
if(hFindFile != INVALID_HANDLE_VALUE)
{
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
m_FilePath = sSearchFile;
m_lab2.SetChecked(false);
ScanFile();
}
}
}
void COpenImageFileDlg::OnButton3()
{
// TODO: Add your control notification handler code here
CString sSearchFile = m_FilePath + L"\\" + m_lab3.GetButtonTitle();
WIN32_FIND_DATA fd; // 查找文件信息
// 查找文件
HANDLE hFindFile = FindFirstFile(sSearchFile,&fd);
if(hFindFile != INVALID_HANDLE_VALUE)
{
if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
m_FilePath = sSearchFile;
m_lab3.SetChecked(false);
ScanFile();
}
}
}
void COpenImageFileDlg::OnButton4()
{
// TODO: Add your control notification handler code here
CString sSearchFile = m_FilePath + L"\\" + m_lab4.GetButtonTitle();
WIN32_FIND_DATA fd; // 查找文件信息
// 查找文件
HANDLE hFindFile = FindFirstFile(sSearchFile,&fd);
if(hFindFile != INVALID_HANDLE_VALUE)
{
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
m_FilePath = sSearchFile;
m_lab4.SetChecked(false);
ScanFile();
}
}
}
void COpenImageFileDlg::OnButton5()
{
// TODO: Add your control notification handler code here
CString sSearchFile = m_FilePath + L"\\" + m_lab5.GetButtonTitle();
WIN32_FIND_DATA fd; // 查找文件信息
// 查找文件
HANDLE hFindFile = FindFirstFile(sSearchFile,&fd);
if(hFindFile != INVALID_HANDLE_VALUE)
{
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
m_FilePath = sSearchFile;
m_lab5.SetChecked(false);
ScanFile();
}
}
}
void COpenImageFileDlg::OnButton6()
{
// TODO: Add your control notification handler code here
CString sSearchFile = m_FilePath + L"\\" + m_lab6.GetButtonTitle();
WIN32_FIND_DATA fd; // 查找文件信息
// 查找文件
HANDLE hFindFile = FindFirstFile(sSearchFile,&fd);
if(hFindFile != INVALID_HANDLE_VALUE)
{
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
m_FilePath = sSearchFile;
m_lab6.SetChecked(false);
ScanFile();
}
}
}
CString COpenImageFileDlg::GetFilePath()
{
if (m_File.IsEmpty())
{
g_Playlist.m_FileList.RemoveAll();
g_Playlist.m_TotalFiles = 0;
return L"";
}
else
{
g_Playlist.m_FileList.RemoveAll();
g_Playlist.m_TotalFiles = 1;
return m_File;
}
}
BOOL COpenImageFileDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
// TODO: Add your message handler code here and/or call default
CString strTitle = *((CString*)(pCopyDataStruct->lpData));
CString sSearchFile = m_FilePath + L"\\" + strTitle;
WIN32_FIND_DATA fd; // 查找文件信息
// 查找文件
HANDLE hFindFile = FindFirstFile(sSearchFile,&fd);
if(hFindFile != INVALID_HANDLE_VALUE)
{
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
m_File= sSearchFile;
EndDialog(IDOK);
}
}
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}