www.pudn.com > ViewerCarry.rar > ThumbViewerDoc.cpp


// ThumbViewerDoc.cpp : implementation of the CThumbViewerDoc class 
// 
 
#include "stdafx.h" 
#include "ThumbViewer.h" 
 
#include "MainFrm.h" 
#include "ThumbViewerDoc.h" 
#include "ThumbViewerView.h" 
#include  
using namespace std;  
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CThumbViewerDoc 
 
IMPLEMENT_DYNCREATE(CThumbViewerDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CThumbViewerDoc, CDocument) 
	//{{AFX_MSG_MAP(CThumbViewerDoc) 
		// NOTE - the ClassWizard will add and remove mapping macros here. 
		//    DO NOT EDIT what you see in these blocks of generated code! 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CThumbViewerDoc construction/destruction 
 
CThumbViewerDoc::CThumbViewerDoc() 
{ 
	// TODO: add one-time construction code here 
	m_pSelectedImage=NULL; 
	//m_strCurrentDirectory=_T(""); 
	m_nSelectedItem=-1; 
} 
 
CThumbViewerDoc::~CThumbViewerDoc() 
{ 
	if(m_pSelectedImage!=NULL) 
		delete m_pSelectedImage; 
} 
 
BOOL CThumbViewerDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CThumbViewerDoc serialization 
 
void CThumbViewerDoc::Serialize(CArchive& ar) 
{ 
	if (ar.IsStoring()) 
	{ 
		// TODO: add storing code here 
	} 
	else 
	{ 
		// TODO: add loading code here 
	} 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CThumbViewerDoc diagnostics 
 
#ifdef _DEBUG 
void CThumbViewerDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CThumbViewerDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CThumbViewerDoc commands 
//这个函数用于或得选择目录里的所有文件 
//我的需求是我只需要从文件选择框获得文件 
/* 
void CThumbViewerDoc::SelectDirectory(LPCTSTR pstr) 
{ 
	CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd(); 
 
	m_strCurrentDirectory=pstr; 
	m_vFileName.clear(); 
 
	if(m_pSelectedImage!=NULL) 
	{ 
		delete m_pSelectedImage; 
		m_pSelectedImage=NULL; 
	} 
	pFrame->m_wndPreviewBar.SendMessage(WM_SIZE); 
 
	CFileFind finder; 
	CString strWildCard(pstr); 
	strWildCard+=_T("\\*.*"); 
 
	BOOL bWorking=finder.FindFile(strWildCard); 
 
	while(bWorking) 
	{ 
		bWorking=finder.FindNextFile(); 
 
		if(finder.IsDots() || finder.IsDirectory()) 
			continue; 
		else 
		{ 
			CString filePath=finder.GetFileName(); 
 
			// Get Image File Name List 
			if(GetTypeFromFileName(filePath)!=CXIMAGE_FORMAT_UNKNOWN) 
			{ 
				// Make Lower for Sorting 
				filePath.MakeLower(); 
				m_vFileName.push_back(filePath); 
			} 
		} 
	} 
	finder.Close(); 
	// Sort FileName 
	CString strTemp; 
	QuickSortString(m_vFileName, 0, m_vFileName.size()-1, strTemp); 
	CThumbViewerView* pView=(CThumbViewerView*)pFrame->GetActiveView(); 
	pView->LoadThumbImages(); 
 
	m_nSelectedItem=-1; 
} 
*/ 
void CThumbViewerDoc::QuickSortString(vector& vString, int left, int right, CString& temp) 
{ 
	if(left < right) 
	{ 
		CString pivot=vString[left]; 
		const int nSize=vString.size(); 
 
		int i=left, j=right+1; 
		do { 
			do i++; 
			while(i < nSize && vString[i].Compare(pivot) < 0); 
			do j--; 
			while(j < nSize && vString[j].Compare(pivot) > 0); 
 
			if(i < j) 
			{ 
				temp=vString[i]; 
				vString[i]=vString[j]; 
				vString[j]=temp; 
			} 
		}while(i &strImageFile) 
void CThumbViewerDoc::GetImageFileName(vector strImageFilePath,vector strImageFileName) 
{ 
	m_vFileName.clear(); 
	m_vFilePath.clear(); 
	/*if(m_pSelectedImage!=NULL) 
	{ 
		delete m_pSelectedImage; 
		m_pSelectedImage=NULL; 
	}*/ 
	//取出数组中的所有元素 
	CString  strFilePath,strFileName;// 
    strFilePath.Empty(); 
    strFileName.Empty(); 
	 
	vector::iterator iterFilePath; 
	vector::iterator iterFileName; 
	int nIndex=0; 
	for(iterFilePath=strImageFilePath.begin(),iterFileName = strImageFileName.begin(); iterFilePath!=strImageFilePath.end(),iterFileName!=strImageFileName.end(); iterFilePath++,iterFileName++, nIndex++) 
	{ 
		strFilePath = *iterFilePath;    
        strFileName = *iterFileName; 
		if(GetTypeFromFileName(strFilePath)!=CXIMAGE_FORMAT_UNKNOWN) 
		{ 
			// Make Lower for Sorting 
			strFilePath.MakeLower(); 
			m_vFilePath.push_back(strFilePath); 
            m_vFileName.push_back(strFileName); 
		} 
	} 
	// Sort FileName 
	CString strTemp; 
	QuickSortString(m_vFileName, 0, m_vFileName.size()-1, strTemp); 
	QuickSortString(m_vFilePath, 0, m_vFilePath.size()-1, strTemp); 
	CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd(); 
	CThumbViewerView* pView=(CThumbViewerView*)pFrame->GetActiveView(); 
	pView->ClearCompArray(); 
 
	pView->LoadThumbImages();//载入图片 
    m_nSelectedItem=-1; 
} 
 
//删除文件路径 
void CThumbViewerDoc::RemoveSelectItem(int nIndex) 
{ 
    //Selected item is equal to current selected item. 
	/*if(m_nSelectedItem!=nIndex) 
	{ 
		return; 
    }*/ 
	/* 
	if((nIndex <= m_vFileName.size()) && (nIndex <= m_vFilePath.size()) ) 
	{ 
		vector::iterator  iterFileName; 
		vector::iterator  iterFilePath; 
		int nTmpIndex=0; 
		for(iterFileName=m_vFileName.begin(),iterFilePath=m_vFilePath.begin();iterFileName!=m_vFileName.end(),iterFilePath!=m_vFilePath.end();iterFileName++,iterFilePath++,nTmpIndex++) 
		{ 
		    if(nTmpIndex< nIndex) 
			{ 
			   continue; 
			} 
			else if(nTmpIndex == nIndex) 
			{ 
               //iterFileName 是这样吗需要+1才能指到下一个吗 
			   m_vFileName.erase(iterFileName,iterFileName+1); 
			   m_vFilePath.erase(iterFilePath,iterFilePath+1); 
			   break; 
			} 
		}//end for 
	}//end if    
	*/ 
	CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd(); 
	CThumbViewerView* pView=(CThumbViewerView*)pFrame->GetActiveView(); 
 
	if((nIndex <= m_vFileName.size()) && (nIndex <= m_vFilePath.size()) ) 
	{ 
	    m_sUpdateFilePath.push_back(m_vFileName.at(nIndex)); 
	    m_sUpdateFileName.push_back(m_vFilePath.at(nIndex)); 
	}//end if 
} 
 
void CThumbViewerDoc::AddUpdateSelectItem(int nIndex) 
{ 
    CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd(); 
	CThumbViewerView* pView=(CThumbViewerView*)pFrame->GetActiveView(); 
 
	if((nIndex <= m_vFileName.size()) && (nIndex <= m_vFilePath.size()) ) 
	{ 
	    m_sUpdateFilePath.push_back(m_vFilePath.at(nIndex)); 
	    m_sUpdateFileName.push_back(m_vFileName.at(nIndex)); 
	}//end if 
} 
 
//最终要上传的文件列表,这个在读取文件时调用 
void CThumbViewerDoc::GetTakeNote() 
{ 
     CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd(); 
	 CThumbViewerView* pView=(CThumbViewerView*)pFrame->GetActiveView(); 
	 //去除不上传的文件路径 
	 for(int i=1;i<=pView->m_nCacelRemove;i++) 
	 { 
		 if(-1 != pView->m_nCacelRemoveArray[i]) 
         { 
		  	 for(int j=1;j<=pView->m_nRemove;j++) 
			 { 
		         
				if((pView->m_nCacelRemoveArray[i] == pView->m_nRemoveArray[j]) && (-1 != pView->m_nRemoveArray[j]) ) 
				{ 
				    pView->m_nRemoveArray[j]= -1;                                                       
				} 
			 }//end for 
         }//end if 
	 }//end for 
     /* 
	 for(int k=1;k<=pView->m_nRemove;k++) 
	 { 
	     if(-1 != pView->m_nRemoveArray[k]) 
		 { 
		    RemoveSelectItem(pView->m_nRemoveArray[k]); 
		 } 
	 }//end for 
	 */ 
	 //全部索引数组 
     int AllIndex[MAX_ARRAY_NUM],nIndex=0; 
	 for(int nInit=0;nInitm_nRemove;nRemoveIndex++) 
	 { 
	     int   n1=pView->m_nRemoveArray[nRemoveIndex]; 
		 if(-1 == n1) 
		 { 
		    continue; 
		 } 
		 for(int nTmpIndex=0;nTmpIndexm_nRemoveArray[nRemoveIndex]) 
			 { 
			    AllIndex[nTmpIndex] = -1; 
			 } 
		 }//end for 
	 }//end for 
     //加入上传的索引 
	 ClearUpdateVec(); 
	 for(int nAddIndex=0;nAddIndex < nAllIndex;nAddIndex++) 
	 { 
	     int n3 = AllIndex[nAddIndex]; 
		 if(-1 != n3) 
		 { 
		    AddUpdateSelectItem(n3);  
         }  
	 }//end for 
      
	 return; 
} 
 
int CThumbViewerDoc::UpdateFileisEmpty() 
{ 
    if((0 >= this->m_sUpdateFilePath.size()) && (0 >= this->m_sUpdateFileName.size())) 
	{ 
	    return 1; 
	} 
	else 
	{ 
	    return 0; 
	} 
} 
 
void CThumbViewerDoc::ClearUpdateVec() 
{ 
   if(!m_sUpdateFilePath.empty()) 
   { 
	 m_sUpdateFilePath.clear(); 
   } 
   if(!m_sUpdateFileName.empty()) 
   { 
     m_sUpdateFileName.clear(); 
   } 
}