www.pudn.com > ImageSplite.rar > app.cpp


#include "stdafx.h" 
#include "app.h" 
#include "MainFrm.h" 
#include "ChildFrm.h" 
#include "Doc.h" 
#include "View.h" 
#include "NewImageDlg.h" 
#include "combinedlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
CApp* GetApp() 
{ 
  return (CApp*) AfxGetApp(); 
} 
 
CMainFrame* GetMainFrame() 
{ 
  return (CMainFrame*) AfxGetMainWnd(); 
} 
 
 
BEGIN_MESSAGE_MAP(CApp, CWinApp) 
	//{{AFX_MSG_MAP(CApp) 
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout) 
	ON_COMMAND(ID_EDIT_EMPTY, OnEditEmpty) 
	ON_UPDATE_COMMAND_UI(ID_EDIT_EMPTY, OnUpdateEditEmpty) 
	ON_COMMAND(ID_EDIT_PASTE_IMAGE, OnEditPasteImage) 
	ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE_IMAGE, OnUpdateEditPasteImage) 
	ON_COMMAND(ID_FILE_NEW, OnFileNew) 
	ON_COMMAND(ID_WINDOW_CLOSEALL, OnWindowCloseall) 
	ON_UPDATE_COMMAND_UI(ID_WINDOW_CLOSEALL, OnUpdateWindowCloseall) 
	ON_COMMAND(ID_CHANNEL_COMBINE, OnChannelCombine) 
	ON_UPDATE_COMMAND_UI(ID_CHANNEL_COMBINE, OnUpdateChannelCombine) 
	ON_COMMAND(IDM_DO_ALL, OnDoAll) 
	//}}AFX_MSG_MAP 
	ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) 
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 
	ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) 
END_MESSAGE_MAP() 
 
CApp::CApp() 
{ 
  m_bNewFromPaste = FALSE; 
  m_nNewWidth = 320; 
  m_nNewHeight = 200; 
} 
 
CApp theApp; 
 
BOOL CApp::InitInstance() 
{ 
  SetRegistryKey(_T("PJ Naughter")); 
	Enable3dControls();			 
	LoadStdProfileSettings(); 
 
	CMultiDocTemplate* pDocTemplate; 
	pDocTemplate = new CMultiDocTemplate( 
		IDR_DIBTESTYPE, 
		RUNTIME_CLASS(CDibtestDoc), 
		RUNTIME_CLASS(CChildFrame), 
		RUNTIME_CLASS(CDibtestView)); 
	AddDocTemplate(pDocTemplate); 
 
	CMainFrame* pMainFrame = new CMainFrame; 
	if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) 
		return FALSE; 
	m_pMainWnd = pMainFrame; 
 
  m_pMainWnd->DragAcceptFiles(); 
 
	CCommandLineInfo cmdInfo; 
	ParseCommandLine(cmdInfo); 
 
  if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) 
    cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; 
 
	if (!ProcessShellCommand(cmdInfo)) 
		return FALSE; 
 
	pMainFrame->ShowWindow(m_nCmdShow); 
	pMainFrame->UpdateWindow(); 
 
	return TRUE; 
} 
 
void CApp::OnAppAbout() 
{ 
	CAboutDlg aboutDlg; 
	aboutDlg.DoModal(); 
} 
 
void CApp::OnEditPasteImage()  
{ 
  POSITION posTemplate = GetFirstDocTemplatePosition(); 
  CDocTemplate* pDocTemplate = GetNextDocTemplate(posTemplate); 
  m_bNewFromPaste = TRUE; 
  CDibtestDoc* pDocument = (CDibtestDoc*) pDocTemplate->OpenDocumentFile(NULL); 
  pDocument->m_Dib.PasteFromClipboard(); 
  pDocument->UpdateHistogramData(); 
  pDocument->SetModifiedFlag(TRUE); 
  pDocument->UpdateAllViews(NULL); 
  m_bNewFromPaste = FALSE; 
} 
 
void CApp::OnUpdateEditPasteImage(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(CDibImage::PasteAvailable()); 
} 
 
void CApp::OnEditEmpty()  
{ 
	if (OpenClipboard(NULL)) 
	{ 
		if (EmptyClipboard()) 
		CloseClipboard(); 
	} 
} 
 
void CApp::OnUpdateEditEmpty(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(CountClipboardFormats() != 0); 
} 
 
void CApp::OnFileNew()  
{ 
  CNewImageDlg dlg; 
  dlg.m_nWidth = m_nNewWidth; 
  dlg.m_nHeight = m_nNewHeight; 
  if (dlg.DoModal() == IDOK) 
  { 
    m_nNewWidth = dlg.m_nWidth; 
    m_nNewHeight = dlg.m_nHeight; 
    CWinApp::OnFileNew(); 
  } 
} 
 
void CApp::OnWindowCloseall()  
{ 
  POSITION posTemplate = GetFirstDocTemplatePosition(); 
  while (posTemplate != NULL)  
  { 
    CDocTemplate* pTemplate = GetNextDocTemplate(posTemplate); 
    ASSERT(pTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate))); 
    POSITION posDoc = pTemplate->GetFirstDocPosition(); 
    while (posDoc != NULL)  
    { 
      CDocument* pDoc = pTemplate->GetNextDoc(posDoc); 
      if (!pDoc->SaveModified()) 
        return;        // user aborted 
      pDoc->OnCloseDocument(); 
    } 
  } 
} 
 
 
int CApp::NumberOfOpenDocuments() const 
{ 
	int nOpenDocuments = 0; 
  POSITION posTemplate = GetFirstDocTemplatePosition(); 
  while (posTemplate != NULL)  
  { 
    CDocTemplate* pTemplate = GetNextDocTemplate(posTemplate); 
    ASSERT(pTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate))); 
    POSITION posDoc = pTemplate->GetFirstDocPosition(); 
    while (posDoc != NULL)  
    { 
      pTemplate->GetNextDoc(posDoc); 
      ++nOpenDocuments; 
    } 
  } 
 
  return nOpenDocuments; 
} 
 
 
void CApp::OnUpdateWindowCloseall(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(NumberOfOpenDocuments()); 
} 
 
 
void CApp::OnChannelCombine()  
{ 
  CCombineDlg dlg; 
  if (dlg.DoModal() == IDOK) 
  { 
    CDibImage dib; 
    if (dib.CombineChannels(*dlg.GetRedImage(), *dlg.GetGreenImage(), *dlg.GetBlueImage())) 
    { 
      POSITION posTemplate = GetFirstDocTemplatePosition(); 
      CDocTemplate* pDocTemplate = GetNextDocTemplate(posTemplate); 
      m_bNewFromPaste = TRUE; 
      CDibtestDoc* pDocument = (CDibtestDoc*) pDocTemplate->OpenDocumentFile(NULL); 
      pDocument->m_Dib = dib; 
      pDocument->UpdateHistogramData(); 
      pDocument->SetModifiedFlag(TRUE); 
      pDocument->UpdateAllViews(NULL); 
      m_bNewFromPaste = FALSE; 
    } 
    else 
      AfxMessageBox(IDS_FAIL_COMBINE); 
  } 
} 
 
void CApp::OnUpdateChannelCombine(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(NumberOfOpenDocuments()); 
} 
 
void CApp::OnFileOpen()  
{ 
  //Bring up the File Open dialog with the customized filter string 
  CString sFilters; 
#ifndef DIBIMAGE_NO_JPEG 
  sFilters.LoadString(IDS_EXTENSIONS); 
#else 
  sFilters.LoadString(IDS_EXTENSIONS2); 
#endif 
	CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, sFilters, NULL); 
	if (dlgFile.DoModal() == IDOK) 
	  AfxGetApp()->OpenDocumentFile(dlgFile.GetPathName()); 
} 
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
	//{{AFX_DATA_INIT(CAboutDlg) 
	//}}AFX_DATA_INIT 
} 
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAboutDlg) 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
	//{{AFX_MSG_MAP(CAboutDlg) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
 
void CApp::OnDoAll()  
{ 
	// TODO: Add your command handler code here 
 
	int iNumAll = 0; 
	//文件名 
	CString strFileName; 
 
	//文件名列表 
	CArray strArrayName; 
	 
	//获得文件列表 
	char szCurrentDir[MAX_PATH+1]; 
	::GetCurrentDirectory(MAX_PATH+1, szCurrentDir); 
	 
	CFileFind finder; 
	::SetCurrentDirectory("F:\\待看资料\\ttt"); 
	 
    BOOL bWorking = finder.FindFile("*.jpg"); 
    while (bWorking) 
    { 
        bWorking = finder.FindNextFile(); 
 
		strFileName = finder.GetFilePath(); 
		 
        int iArrayNum = 0; 
		iArrayNum = strArrayName.GetSize(); 
 
		if (iArrayNum != 0) 
		{ 
			for(int i = 0; i strFileName) 
				{ 
					strArrayName.InsertAt(i, strFileName); 
					break; 
				} 
			} 
 
			if (iArrayNum == strArrayName.GetSize()) 
			{ 
				strArrayName.Add(strFileName); 
			} 
 
		} 
		else 
		{ 
			strArrayName.Add(strFileName); 
		} 
	} 
 
	int iFileNum = strArrayName.GetSize(); 
 
	for(int i = 0; iOpenDocumentFile(strArrayName.GetAt(i)); 
 
		//分区 
		CDibtestDoc* pDoc = pDocument; 
		CSize size(pDoc->m_Dib.Size()); 
		CRect rc = pDoc->m_Dib.Rect(); 
		CRect rc1; 
		rc1.left = rc.left; 
		rc1.top = rc.top; 
		rc1.bottom = rc.bottom; 
		rc1.right = rc.right/2;  
 
		pDoc->m_Dib.SetWorkingArea(new CRectWorkingArea(rc1)); 
		pDoc->UpdateHistogramData(); 
 
		pDoc->m_Dib.CopyToClipboard(); 
 
		POSITION posTemplate = GetFirstDocTemplatePosition(); 
		CDocTemplate* pDocTemplate = GetNextDocTemplate(posTemplate); 
		m_bNewFromPaste = TRUE; 
		CDibtestDoc* pDocument2 = (CDibtestDoc*) pDocTemplate->OpenDocumentFile(NULL); 
		pDocument2->m_Dib.PasteFromClipboard(); 
		pDocument2->UpdateHistogramData(); 
		pDocument2->SetModifiedFlag(TRUE); 
		pDocument2->UpdateAllViews(NULL); 
		m_bNewFromPaste = FALSE; 
		//Invalidate(FALSE); 
 
		CString strSaveName; 
 
		//保存拷贝得到的文件 
		if (iNumAll < 10) 
		{ 
			strSaveName.Format("d:\\MyPic00%d.jpg", iNumAll); 
		} 
		else if (iNumAll <100) 
		{ 
			strSaveName.Format("d:\\MyPic0%d.jpg", iNumAll); 
		} 
		else 
		{ 
			strSaveName.Format("d:\\MyPic%d.jpg", iNumAll); 
		} 
		 
		pDocument2->m_Dib.Save(strSaveName); 
 
		iNumAll ++; 
 
		rc1.left = rc.right/2; 
		rc1.top = rc.top; 
		rc1.bottom = rc.bottom; 
		rc1.right = rc.right;  
		 
		pDoc->m_Dib.SetWorkingArea(new CRectWorkingArea(rc1)); 
 
		pDoc->UpdateHistogramData(); 
		 
		pDoc->m_Dib.CopyToClipboard(); 
 
		pDocument2->m_Dib.PasteFromClipboard(); 
		pDocument2->UpdateHistogramData(); 
		pDocument2->SetModifiedFlag(TRUE); 
		pDocument2->UpdateAllViews(NULL); 
 
		if (iNumAll < 10) 
		{ 
			strSaveName.Format("d:\\MyPic00%d.jpg", iNumAll); 
		} 
		else if (iNumAll <100) 
		{ 
			strSaveName.Format("d:\\MyPic0%d.jpg", iNumAll); 
		} 
		else 
		{ 
			strSaveName.Format("d:\\MyPic%d.jpg", iNumAll); 
		} 
		 
		pDocument2->m_Dib.Save(strSaveName); 
		 
		iNumAll ++; 
		 
 
 
		//直接退出 
		pDocument->SetModifiedFlag(FALSE); 
		pDocument2->SetModifiedFlag(FALSE); 
		 
		pDocument->OnCloseDocument(); 
		pDocument2->OnCloseDocument(); 
	} 
 
	::SetCurrentDirectory(szCurrentDir); 
	 
	 
	 
}