// OCRUTIL.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #include "OCRUTIL.h" #include "MainFrm.h" #include "OCRUtilDoc.h" #include "OCRUtilView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // COCRUtilApp BEGIN_MESSAGE_MAP(COCRUtilApp, CWinApp) //{{AFX_MSG_MAP(COCRUtilApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // COCRUtilApp construction COCRUtilApp::COCRUtilApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance m_hTwnSession = NULL; } ///////////////////////////////////////////////////////////////////////////// // The one and only COCRUtilApp object COCRUtilApp theApp; ///////////////////////////////////////////////////////////////////////////// // COCRUtilApp initialization BOOL COCRUtilApp::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 // Change the registry key under which our settings are stored. // 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) // Register the application's document templates. Document templates // serve as the connection between documents, frame windows and views. CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(COCRUtilDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(COCRUtilView)); AddDocTemplate(pDocTemplate); // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) return FALSE; // The one and only window has been initialized, so show and update it. m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); UNLOCKSUPPORT(); L_UnlockSupport(L_SUPPORT_OMR, L_KEY_OMR); L_UnlockSupport(L_SUPPORT_ICR, L_KEY_ICR); m_bTwnExist = L_IsTwainAvailable(m_pMainWnd->m_hWnd); if (m_bTwnExist) { APPLICATIONDATA AppData; AppData.hWnd = AfxGetApp()->m_pMainWnd->m_hWnd; lstrcpy (AppData.szManufacturerName, TEXT("LEAD Technologies, Inc.")); lstrcpy (AppData.szAppProductFamily, TEXT("LEAD Test Applications")); lstrcpy (AppData.szVersionInfo, TEXT("Version 1.0")); lstrcpy (AppData.szAppName, TEXT("TWAIN Test Application")); AppData.uStructSize = sizeof(APPLICATIONDATA); L_TwainInitSession(&m_hTwnSession, &AppData); } POSITION pos = pDocTemplate->GetFirstDocPosition(); COCRUtilDoc * pDoc = (COCRUtilDoc *)pDocTemplate->GetNextDoc(pos); COCRUtilView * pView = (COCRUtilView *)pDoc->GetView(); if (pView->InitEngine()) { L_TCHAR szTempPath[MAX_PATH]; GetTempPath(MAX_PATH, szTempPath); pView->m_csRecogDataFileName.Format(TEXT("%s%s"), szTempPath, TEXT("OCRPages.RDF")); } L_DlgInit(DLG_INIT_COLOR); L_InitBitmap(&m_Bitmap, sizeof(BITMAPHANDLE), 0, 0, 0); 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) virtual BOOL OnInitDialog(); //}}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) //}}AFX_MSG_MAP END_MESSAGE_MAP() // App command to run the dialog void COCRUtilApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // COCRUtilApp commands int COCRUtilApp::ExitInstance() { if (m_hTwnSession) L_TwainEndSession(&m_hTwnSession); if (m_Bitmap.Flags.Allocated) L_FreeBitmap(&m_Bitmap); L_DlgFree(); return CWinApp::ExitInstance(); } void COCRUtilApp::OnFileOpen() { OPENFILENAME OpenFileName; OPENDLGPARAMS FOParm; memset(&FOParm, 0, sizeof(OPENDLGPARAMS)); memset(&OpenFileName, 0, sizeof(OPENFILENAME)); FOParm.uStructSize = sizeof(OPENDLGPARAMS); FOParm.bPreviewEnabled = TRUE; FOParm.uDlgFlags = DLG_OPEN_SHOW_PROGRESSIVE | DLG_OPEN_SHOW_MULTIPAGE | DLG_OPEN_SHOW_LOADROTATED | DLG_OPEN_SHOW_LOADCOMPRESSED | DLG_OPEN_SHOW_FILEINFO | DLG_OPEN_SHOW_PREVIEW | DLG_OPEN_SHOW_DELPAGE | DLG_OPEN_SHOW_LOADOPTIONS | DLG_OPEN_SHOW_RASTEROPTIONS | DLG_OPEN_SHOW_PDFOPTIONS | DLG_OPEN_SHOW_VECTOROPTIONS | DLG_OPEN_VIEWTOTALPAGES | DLG_OPEN_ENABLESIZING | DLG_OPEN_NOFILEMUSTEXIST | DLG_OPEN_NOPATHMUSTEXIST | DLG_OPEN_USEFILESTAMP; OpenFileName.lStructSize = sizeof(OPENFILENAME); OpenFileName.hwndOwner = NULL; OpenFileName.lpstrFilter = NULL; OpenFileName.lpstrCustomFilter = NULL; OpenFileName.nMaxCustFilter = 0; OpenFileName.nFilterIndex = 0; OpenFileName.lpstrInitialDir = NULL; OpenFileName.lpstrTitle = TEXT("Open a File"); OpenFileName.nFileOffset = 0; OpenFileName.nFileExtension = 0; OpenFileName.lpstrDefExt = NULL; OpenFileName.Flags = 0; L_INT nRet = L_DlgOpen(m_pMainWnd->m_hWnd,&OpenFileName,&FOParm); if (nRet == SUCCESS_DLG_OK) { m_nPageNum = FOParm.pFileData[0].nPageNumber; POSITION pos = GetFirstDocTemplatePosition(); CDocTemplate* pDocTemplate = GetNextDocTemplate(pos); pDocTemplate->OpenDocumentFile(FOParm.pFileData[0].szFileName); CleanOpenDlgParam(&FOParm); } } void COCRUtilApp::CleanOpenDlgParam(LPOPENDLGPARAMS pFOParam) { if (pFOParam && pFOParam->pFileData != NULL) { for (L_INT i=0; i < pFOParam->nNumOfFiles; i++) { if (pFOParam->pFileData[i].pBitmap) { if (pFOParam->pFileData[i].pBitmap->Flags.Allocated) L_FreeBitmap(pFOParam->pFileData[i].pBitmap); GlobalFreePtr(pFOParam->pFileData[i].pBitmap); } if (pFOParam->pFileData[i].pThumbnail) { if (pFOParam->pFileData[i].pThumbnail->Flags.Allocated) L_FreeBitmap(pFOParam->pFileData[i].pThumbnail); GlobalFreePtr(pFOParam->pFileData[i].pThumbnail); } if (pFOParam->pFileData[i].pFileInfo) GlobalFreePtr(pFOParam->pFileData[i].pFileInfo); } GlobalFreePtr(pFOParam->pFileData); pFOParam->pFileData = NULL; pFOParam->nNumOfFiles = 0; } } void COCRUtilApp::AddTwainImage() { CWinApp::OnFileNew(); } void COCRUtilApp::OnEditPaste() { if (m_Bitmap.Flags.Allocated) { L_FreeBitmap(&m_Bitmap); L_InitBitmap(&m_Bitmap, sizeof(BITMAPHANDLE), 0, 0, 0); } L_BOOL bRet = L_CopyFromClipboard(m_pMainWnd->GetSafeHwnd(), &m_Bitmap, sizeof(BITMAPHANDLE)); if (bRet) { m_nPageMode = NEW_PAGE_FROM_CLIPBOARD; CWinApp::OnFileNew(); } } void COCRUtilApp::OnUpdateEditPaste(CCmdUI* pCmdUI) { pCmdUI->Enable(L_ClipboardReady()); } BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); VERSIONINFO VerInfo; /* LEAD Version Information structure. */ L_TCHAR szBuffer[1024]; /* Buffer to hold information for display. */ /* Get the version information */ L_VersionInfo (&VerInfo, sizeof(VERSIONINFO)); /* Format the message string with data from the VERSIONINFO structure */ wsprintf(szBuffer, TEXT("LEAD Product: %hs\nVersion %d.%d\nDate: %hs\nTime: %hs"), (L_TCHAR L_FAR *)VerInfo.Product, VerInfo.MajorNumber, VerInfo.MinorNumber, (L_TCHAR L_FAR *)VerInfo.Date, (L_TCHAR L_FAR *)VerInfo.Time); GetDlgItem(IDC_STATIC_VERSIONINFO)->SetWindowText(szBuffer); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } CString COCRUtilApp::GetLanguageName(LANGIDS LangId) { CString csLanguage; switch (LangId) { case LANG_ID_AUTO: csLanguage = ("Automatic"); break; case LANG_ID_NO: csLanguage = ("No language"); break; case LANG_ID_ENGLISH: csLanguage = ("English"); break; case LANG_ID_GERMAN: csLanguage = ("German"); break; case LANG_ID_FRENCH: csLanguage = ("French"); break; case LANG_ID_DUTCH: csLanguage = ("Dutch"); break; case LANG_ID_NORWEGIAN: csLanguage = ("Norwegian"); break; case LANG_ID_SWEDISH: csLanguage = ("Swedish"); break; case LANG_ID_FINNISH: csLanguage = ("Finnish"); break; case LANG_ID_DANISH: csLanguage = ("Danish"); break; case LANG_ID_ICELANDIC: csLanguage = ("Icelandic"); break; case LANG_ID_PORTUGUESE: csLanguage = ("Portuguese"); break; case LANG_ID_SPANISH: csLanguage = ("Spanish"); break; case LANG_ID_CATALAN: csLanguage = ("Catalan"); break; case LANG_ID_ITALIAN: csLanguage = ("Italian"); break; case LANG_ID_MALTESE: csLanguage = ("Maltese"); break; case LANG_ID_GREEK: csLanguage = ("Greek"); break; case LANG_ID_POLISH: csLanguage = ("Polish"); break; case LANG_ID_CZECH: csLanguage = ("Czech"); break; case LANG_ID_SLOVAK: csLanguage = ("Slovak"); break; case LANG_ID_HUNGARIAN: csLanguage = ("Hungarian"); break; case LANG_ID_SLOVENIAN: csLanguage = ("Slovenian"); break; case LANG_ID_CROATIAN: csLanguage = ("Croatian"); break; case LANG_ID_ROMANIAN: csLanguage = ("Romanian"); break; case LANG_ID_ALBANIAN: csLanguage = ("Albanian"); break; case LANG_ID_TURKISH: csLanguage = ("Turkish"); break; case LANG_ID_ESTONIAN: csLanguage = ("Estonian"); break; case LANG_ID_LATVIAN: csLanguage = ("Latvian"); break; case LANG_ID_LITHUANIAN: csLanguage = ("Lithuanian"); break; case LANG_ID_ESPERANTO: csLanguage = ("Esperanto"); break; case LANG_ID_SERBIAN: csLanguage = ("Serbian"); break; case LANG_ID_MACEDONIAN: csLanguage = ("Macedonian (Cyrillic)"); break; case LANG_ID_MOLDAVIAN: csLanguage = ("Moldavian (Cyrillic)"); break; case LANG_ID_BULGARIAN: csLanguage = ("Bulgarian (Cyrillic)"); break; case LANG_ID_BYELORUSSIAN: csLanguage = ("Byelorussian (Cyrillic)"); break; case LANG_ID_UKRAINIAN: csLanguage = ("Ukrainian (Cyrillic)"); break; case LANG_ID_RUSSIAN: csLanguage = ("Russian (Cyrillic)"); break; case LANG_ID_AFRIKAANS: csLanguage = ("Afrikaans"); break; case LANG_ID_AYMARA: csLanguage = ("Aymara"); break; case LANG_ID_BASQUE: csLanguage = ("Basque"); break; case LANG_ID_BEMBA: csLanguage = ("Bemba"); break; case LANG_ID_BLACKFOOT: csLanguage = ("Blackfoot"); break; case LANG_ID_BRETON: csLanguage = ("Breton"); break; case LANG_ID_BRAZILIAN: csLanguage = ("Portuguese (Brazilian)"); break; case LANG_ID_BUGOTU: csLanguage = ("Bugotu"); break; case LANG_ID_CHAMORRO: csLanguage = ("Chamorro"); break; case LANG_ID_CHECHEN: csLanguage = ("Chechen"); break; case LANG_ID_CHUANA_TSWANA: csLanguage = ("Chuana/Tswana"); break; case LANG_ID_CORSICAN: csLanguage = ("Corsican"); break; case LANG_ID_CROW: csLanguage = ("Crow"); break; case LANG_ID_ESKIMO: csLanguage = ("Eskimo"); break; case LANG_ID_FAROESE: csLanguage = ("Faroese"); break; case LANG_ID_FIJIAN: csLanguage = ("Fijian"); break; case LANG_ID_FRISIAN: csLanguage = ("Frisian"); break; case LANG_ID_FRIULIAN: csLanguage = ("Friulian"); break; case LANG_ID_GAELIC_IRISH: csLanguage = ("Gaelic Irish"); break; case LANG_ID_GAELIC_SCOTTISH: csLanguage = ("Gaelic Scottish"); break; case LANG_ID_GANDA_LUGANDA: csLanguage = ("Ganda/Luganda"); break; case LANG_ID_GUARANI: csLanguage = ("Guarani"); break; case LANG_ID_HANI: csLanguage = ("Hani"); break; case LANG_ID_HAWAIIAN: csLanguage = ("Hawaiian"); break; case LANG_ID_IDO: csLanguage = ("Ido"); break; case LANG_ID_INDONESIAN: csLanguage = ("Indonesian"); break; case LANG_ID_INTERLINGUA: csLanguage = ("Interlingua"); break; case LANG_ID_KABARDIAN: csLanguage = ("Kabardian"); break; case LANG_ID_KASUB: csLanguage = ("Kasub"); break; case LANG_ID_KAWA: csLanguage = ("Kawa"); break; case LANG_ID_KIKUYU: csLanguage = ("Kikuyu"); break; case LANG_ID_KONGO: csLanguage = ("Kongo"); break; case LANG_ID_KPELLE: csLanguage = ("Kpelle"); break; case LANG_ID_KURDISH: csLanguage = ("Kurdish"); break; case LANG_ID_LAPPISH: csLanguage = ("Lappish"); break; case LANG_ID_LATIN: csLanguage = ("Latin"); break; case LANG_ID_LUBA: csLanguage = ("Luba"); break; case LANG_ID_LUXEMBOURGIAN: csLanguage = ("Luxembourgian"); break; case LANG_ID_MALAGASY: csLanguage = ("Malagasy"); break; case LANG_ID_MALAY: csLanguage = ("Malay"); break; case LANG_ID_MALINKE: csLanguage = ("Malinke"); break; case LANG_ID_MAORI: csLanguage = ("Maori"); break; case LANG_ID_MAYAN: csLanguage = ("Mayan"); break; case LANG_ID_MIAO: csLanguage = ("Miao"); break; case LANG_ID_MINANKABAW: csLanguage = ("Minankabaw"); break; case LANG_ID_MOHAWK: csLanguage = ("Mohawk"); break; case LANG_ID_NAHUATL: csLanguage = ("Nahuatl"); break; case LANG_ID_NYANJA: csLanguage = ("Nyanja"); break; case LANG_ID_OCCIDENTAL: csLanguage = ("Occidental"); break; case LANG_ID_OJIBWAY: csLanguage = ("Ojibway"); break; case LANG_ID_PAPIAMENTO: csLanguage = ("Papiamento"); break; case LANG_ID_PIDGIN_ENGLISH: csLanguage = ("Pidgin English"); break; case LANG_ID_PROVENCAL: csLanguage = ("Provencal"); break; case LANG_ID_QUECHUA: csLanguage = ("Quechua"); break; case LANG_ID_RHAETIC: csLanguage = ("Rhaetic"); break; case LANG_ID_ROMANY: csLanguage = ("Romany"); break; case LANG_ID_RUANDA: csLanguage = ("Ruanda"); break; case LANG_ID_RUNDI: csLanguage = ("Rundi"); break; case LANG_ID_SAMOAN: csLanguage = ("Samoan"); break; case LANG_ID_SARDINIAN: csLanguage = ("Sardinian"); break; case LANG_ID_SHONA: csLanguage = ("Shona"); break; case LANG_ID_SIOUX: csLanguage = ("Sioux"); break; case LANG_ID_SOMALI: csLanguage = ("Somali"); break; case LANG_ID_SOTHO_SUTO_SESUTO: csLanguage = ("Sotho/Suto/Sesuto"); break; case LANG_ID_SUNDANESE: csLanguage = ("Sundanese"); break; case LANG_ID_SWAHILI: csLanguage = ("Swahili"); break; case LANG_ID_SWAZI: csLanguage = ("Swazi"); break; case LANG_ID_TAGALOG: csLanguage = ("Tagalog"); break; case LANG_ID_TAHITIAN: csLanguage = ("Tahitian"); break; case LANG_ID_TINPO: csLanguage = ("Tinpo"); break; case LANG_ID_TONGAN: csLanguage = ("Tongan"); break; case LANG_ID_TUN: csLanguage = ("Tun"); break; case LANG_ID_VISAYAN: csLanguage = ("Visayan"); break; case LANG_ID_WELSH: csLanguage = ("Welsh"); break; case LANG_ID_WEND_SORBIAN: csLanguage = ("Wend/Sorbian"); break; case LANG_ID_WOLOF: csLanguage = ("Wolof"); break; case LANG_ID_XHOSA: csLanguage = ("Xhosa"); break; case LANG_ID_ZAPOTEC: csLanguage = ("Zapotec"); break; case LANG_ID_ZULU: csLanguage = ("Zulu"); break; } return csLanguage; } ///////////////////////////////////////////////////////////////////////////// // CAsciiEdit Edit box #ifdef UNICODE CAsciiEdit::CAsciiEdit ( ) { } CAsciiEdit::~CAsciiEdit () { } LRESULT CAsciiEdit::WindowProc ( UINT message, WPARAM wParam, LPARAM lParam) { switch ( message ) { case WM_PASTE: { if ( !CheckPasteText ( ) ) { MessageBox ( _T ( "You should enter ANSII characters." ) ) ; return 0 ; } break ; } case WM_CHAR: { // Enter only English char if ( wParam > 128) { MessageBox ( _T ( "You should enter ANSII characters." ) ) ; return 0 ; } break ; } } return CEdit::WindowProc ( message, wParam, lParam ) ; } BOOL CAsciiEdit::CheckPasteText ( ) { CString strText ; LPTSTR lptstrPaste = NULL; if ( !OpenClipboard( ) ) { return FALSE; } #ifdef UNICODE HGLOBAL hglbPaste = ::GetClipboardData( CF_UNICODETEXT ) ; #else HGLOBAL hglbPaste = ::GetClipboardData( CF_TEXT ); #endif if ( hglbPaste != NULL ) { lptstrPaste = ( TCHAR* )::GlobalLock( hglbPaste ); if ( lptstrPaste != NULL ) { ::GlobalUnlock( hglbPaste ); } } ::CloseClipboard(); if ( lptstrPaste == NULL ) { return FALSE; } strText = lptstrPaste; if ( ! CheckText ( strText ) ) { return FALSE; } return TRUE ; } BOOL CAsciiEdit::CheckText ( CString &str ) { int iLen = str.GetLength () ; for ( int i = 0; i < iLen; ++i ) { if ( str[i] > 128 ) { return FALSE ; } } return TRUE ; } #endif