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" #includeusing 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;nInit m_nRemove;nRemoveIndex++) { int n1=pView->m_nRemoveArray[nRemoveIndex]; if(-1 == n1) { continue; } for(int nTmpIndex=0;nTmpIndex m_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(); } }