// ABCDemo.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #include "ABCDemo.h" #include "MainFrm.h" #include "ChildFrm.h" #include "ABCDoc.h" #include "ABCView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CABCApp BEGIN_MESSAGE_MAP(CABCApp, CWinApp) //{{AFX_MSG_MAP(CABCApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_NORMAL, OnNormal) ON_COMMAND(ID_SCALETOGRAY, OnScaletogray) ON_COMMAND(ID_FAVORBLCAK, OnFavorblcak) ON_UPDATE_COMMAND_UI(ID_FAVORBLCAK, OnUpdateFavorblcak) ON_UPDATE_COMMAND_UI(ID_NORMAL, OnUpdateNormal) ON_UPDATE_COMMAND_UI(ID_SCALETOGRAY, OnUpdateScaletogray) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CABCApp construction CABCApp::CABCApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance m_pRasterKrnDlg = NULL; m_pRasterFileDlg = NULL; m_pRasterProc = NULL; m_pRasterIO = NULL; m_pRaster = NULL; m_nPageNumber = 0; m_bCombine = FALSE; m_Quality = -1; m_szFileName = TEXT(""); m_szOpenedFileName = TEXT(""); m_szImageDir = TEXT("c:\\\0"); m_bLoadOriginal = FALSE; memset(&m_OpenFileName,0, sizeof(m_OpenFileName)); m_OpenFileName.lStructSize = sizeof(OPENFILENAME); m_OpenFileName.lpstrInitialDir = NULL; m_OpenFileName.lpstrTitle = TEXT("Save a File"); m_OpenFileName.nFileOffset = 0; m_OpenFileName.Flags = 0; m_szQuality = TEXT(""); m_nViewScale = BITONALSCALING_SCALETOGRAY; } ///////////////////////////////////////////////////////////////////////////// // The one and only CABCApp object CABCApp theApp; ///////////////////////////////////////////////////////////////////////////// // CABCApp initialization BOOL CABCApp::InitInstance() { AfxEnableControlContainer(); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif CoInitialize(0); // Change the registry key under which our settings are stored. // TODO: You should modify this string to be something appropriate // such as the name of your company or organization. SetRegistryKey(_T("Local AppWizard-Generated Applications")); LoadStdProfileSettings(0); // Load standard INI file options (including MRU) CString cs; cs = GetProfileString(TEXT("Settings"), TEXT("ImageDir"), TEXT("c:\\")); m_szImageDir = cs; // Register the application's document templates. Document templates // serve as the connection between documents, frame windows and views. CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_ABCDEMTYPE, RUNTIME_CLASS(CABCDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CABCView)); AddDocTemplate(pDocTemplate); // create main MDI Frame window CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE; m_pMainWnd = pMainFrame; // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); //Do not create document at startup if (CCommandLineInfo::FileNew == cmdInfo.m_nShellCommand) cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) return FALSE; HRESULT hr = CoCreateInstance(CLSID_LEADRasterDlgKrn, NULL, CLSCTX_ALL, IID_ILEADRasterDlgKrn, (void**)&m_pRasterKrnDlg); if (FAILED(hr)) return FALSE; hr = CoCreateInstance(CLSID_LEADRasterDlgFile, NULL, CLSCTX_ALL, IID_ILEADRasterDlgFile, (void**)&m_pRasterFileDlg); if (FAILED(hr)) return FALSE; hr = CoCreateInstance(CLSID_LEADRasterProcess, NULL, CLSCTX_ALL, IID_ILEADRasterProcess, (void**)&m_pRasterProc); if (FAILED(hr)) return FALSE; hr = CoCreateInstance(CLSID_LEADRasterIO, NULL, CLSCTX_ALL, IID_ILEADRasterIO, (void**)&m_pRasterIO); if (FAILED(hr)) return FALSE; // Unlock support hr = CoCreateInstance(CLSID_LEADRaster, NULL, CLSCTX_ALL, IID_ILEADRaster, (void**)&m_pRaster); if (FAILED(hr)) return FALSE; UNLOCKSUPPORT(*m_pRaster); m_pRaster->EnableMethodErrors = FALSE; m_pRasterKrnDlg->EnableMethodErrors = FALSE; m_pRasterKrnDlg->InitDlg(INIT_WITH_COLOR); m_pRasterFileDlg->EnableMethodErrors = FALSE; m_pRasterIO->EnableMethodErrors = FALSE; // The main window has been initialized, so show and update it. pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); WINDOWPLACEMENT wndpl; // This code is just to maximize the windoe.. if (pMainFrame->GetWindowPlacement(&wndpl)) { wndpl.showCmd = SW_SHOWMAXIMIZED; pMainFrame->SetWindowPlacement(&wndpl); } return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) // No message handlers //}}AFX_MSG DECLARE_MESSAGE_MAP() }; 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) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() // App command to run the dialog void CABCApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // CABCApp message handlers int CABCApp::ExitInstance() { if (m_pRasterKrnDlg) { m_pRasterKrnDlg->FreeDlg(); m_pRasterKrnDlg->Release(); } if (m_pRasterFileDlg) m_pRasterFileDlg->Release(); if (m_pRasterIO) m_pRasterIO->Release(); if (m_pRasterProc) m_pRasterProc->Release(); if (m_pRaster) m_pRaster->Release(); CoUninitialize(); return CWinApp::ExitInstance(); } void CABCApp::OnFileOpen() { m_pRasterFileDlg->PutFilter(""); m_pRasterFileDlg->PutFileDlgFlags(0); m_pRasterFileDlg->PutFileName(""); m_pRasterFileDlg->PutDialogTitle("Open File"); m_pRasterFileDlg->PutUIFlags(OPEN_SHOW_MULTIPAGE | OPEN_SHOW_PREVIEW | OPEN_USEFILESTAMP | OPEN_SHOW_FILEINFO | OPEN_SHOW_LOADOPTIONS | OPEN_SHOW_LOADCOMPRESSED | OPEN_SHOW_LOADROTATED | OPEN_SHOW_DELPAGE | OPEN_SHOW_PDFOPTIONS | OPEN_SHOW_RASTEROPTIONS | OPEN_SHOW_VECTOROPTIONS | OPEN_VIEWTOTALPAGES | OPEN_ENABLESIZING); int nRet = m_pRasterFileDlg->ShowOpenDlg((long)m_pMainWnd->m_hWnd); if (nRet == 0 && m_pRasterFileDlg->GetDialogStatus() == DLG_OK) { m_nPageNumber = (short)m_pRasterFileDlg->GetPageNumber(); m_Quality = -1; m_szQuality = TEXT(""); CloseAllDocuments(FALSE); POSITION pos = GetFirstDocTemplatePosition(); CDocTemplate* pDocTemplate = GetNextDocTemplate(pos); m_bLoadOriginal = TRUE; CABCDoc * pDoc = (CABCDoc *)pDocTemplate->OpenDocumentFile(m_pRasterFileDlg->GetFileName()); m_bLoadOriginal = FALSE; CString csTitle = pDoc->GetTitle(); csTitle += TEXT(" (Original)"); pDoc->SetTitle(csTitle); } } int CABCApp::DisplayLEADError(int nCode) { CString cs; if (nCode != 0) { cs.Format(TEXT("A LEADTOOLS error has occured.\nCODE = %d"), nCode); m_pMainWnd->MessageBox(cs, TEXT("Error"), MB_OK|MB_ICONERROR); } return(nCode); } BOOL CABCApp::FitImagesToWindows() { BOOL bRet = FALSE; POSITION pos = GetFirstDocTemplatePosition(); while (pos) { CDocTemplate* pTemplate = (CDocTemplate*)GetNextDocTemplate(pos); POSITION pos2 = pTemplate->GetFirstDocPosition(); while (pos2 != NULL) { CDocument* pDoc = pTemplate->GetNextDoc(pos2); POSITION pos = pDoc->GetFirstViewPosition(); CABCView* pFirstView = (CABCView*)pDoc->GetNextView( pos ); pFirstView->FitImageToWindow(); } } return FALSE; } BOOL CABCApp::ClosePreviewDocument() { BOOL bRet = FALSE; POSITION pos = GetFirstDocTemplatePosition(); while (pos) { CDocTemplate* pTemplate = (CDocTemplate*)GetNextDocTemplate(pos); POSITION pos2 = pTemplate->GetFirstDocPosition(); while (pos2 != NULL) { CDocument* pDoc = pTemplate->GetNextDoc(pos2); CString sTitle = pDoc->GetTitle(); CString sPT = sTitle.Left(sizeof(PREVIEWSTRING) - 1); CString sPV(PREVIEWSTRING); if (!sPT.Compare(sPV)) pDoc->OnCloseDocument(); } } return FALSE; } void CABCApp::OnNormal() { m_nViewScale = BITONALSCALING_NORMAL; UpdateAllDocumentViews(); } void CABCApp::OnUpdateNormal(CCmdUI* pCmdUI) { pCmdUI->SetRadio(m_nViewScale == BITONALSCALING_NORMAL); } void CABCApp::OnScaletogray() { m_nViewScale = BITONALSCALING_SCALETOGRAY; UpdateAllDocumentViews(); } void CABCApp::OnUpdateScaletogray(CCmdUI* pCmdUI) { pCmdUI->SetRadio(m_nViewScale == BITONALSCALING_SCALETOGRAY); } void CABCApp::OnFavorblcak() { m_nViewScale = BITONALSCALING_FAVORBLACK; UpdateAllDocumentViews(); } void CABCApp::OnUpdateFavorblcak(CCmdUI* pCmdUI) { pCmdUI->SetRadio(m_nViewScale == BITONALSCALING_FAVORBLACK); } void CABCApp::UpdateAllDocumentViews() { POSITION pos = theApp.GetFirstDocTemplatePosition(); while (pos != NULL) { CDocTemplate* pTemplate = theApp.GetNextDocTemplate(pos); POSITION posDoc = pTemplate->GetFirstDocPosition(); while(posDoc != NULL) { CDocument* pDoc = pTemplate->GetNextDoc(posDoc); pDoc->UpdateAllViews(NULL, (LPARAM) 0); } } }