// BarCode.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #include "BarCode.h" #include "MainFrm.h" #include "ChildFrm.h" #include "BarDoc.h" #include "BarView.h" #include "DlgNew.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CBarCodeApp BEGIN_MESSAGE_MAP(CBarCodeApp, CWinApp) //{{AFX_MSG_MAP(CBarCodeApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_FILE_NEW, OnFileNew) ON_COMMAND(ID_FILE_TWAIN_SELSRC, OnFileTwainSelSrc) ON_UPDATE_COMMAND_UI(ID_FILE_TWAIN_SELSRC, OnUpdateFileTwainSelSrc) ON_COMMAND(ID_FILE_TWAIN_ACQUIRE, OnFileTwainAcquire) ON_UPDATE_COMMAND_UI(ID_FILE_TWAIN_ACQUIRE, OnUpdateFileTwainAcquire) ON_COMMAND(ID_FILE_ISIS_SELSRC, OnFileIsisSelSrc) ON_UPDATE_COMMAND_UI(ID_FILE_ISIS_SELSRC, OnUpdateFileIsisSelSrc) ON_COMMAND(ID_FILE_ISIS_ACQUIRE, OnFileIsisAcquire) ON_UPDATE_COMMAND_UI(ID_FILE_ISIS_ACQUIRE, OnUpdateFileIsisAcquire) ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste) ON_COMMAND(ID_WINDOW_CLOSEALL, OnWindowCloseAll) ON_COMMAND(ID_FILE_ALL_ERROR, OnFileAllError) ON_UPDATE_COMMAND_UI(ID_FILE_ALL_ERROR, OnUpdateFileAllError) //}}AFX_MSG_MAP // Standard file based document commands END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBarCodeApp construction CBarCodeApp::CBarCodeApp() { m_ulLibs = LT_BAR | LT_KRN | LT_DIS | LT_DLG | LT_FIL | LT_ISI | LT_TWN; LBase::LoadLibraries(m_ulLibs); LBase::SetErrorListDepth(100); WRPUNLOCKSUPPORT(); memset(m_szCurScanDriver, 0, sizeof(m_szCurScanDriver)); memset(m_szCaption, 0, sizeof(m_szCaption)); // Set Initial values for Read Dlg #ifndef UNICODE m_nSymbolType = BARCODE_LINEAR; #else m_nSymbolType = BARCODE_PDF; #endif memset(&m_BarCode1D, 0, sizeof(BARCODE1D)); memset(&m_BarCodePDF, 0, sizeof(BARCODEREADPDF)); m_BarCodePDF.uStructSize = sizeof(BARCODEREADPDF); m_BarCode1D.uStructSize = sizeof(BARCODE1D); m_BarCode1D.nMinLength = 3; m_BarCode1D.nGranularity = 9; m_BarCode1D.nDirection = BARCODE_DIR_HORIZONTAL; m_BarCode1D.nWhiteLines = 3; m_BarCodePDF.nDirection = BARCODE_DIR_LEFT_TO_RIGHT; m_BarCodeReadOpt.BarColor.uStructSize = sizeof(BARCODECOLOR); m_BarCodeReadOpt.nUnits = BARCODE_SCANLINES_PER_PIXELS; m_BarCodeReadOpt.nMultipleMax = 0; m_BarCodeReadOpt.bUseRgn = FALSE; m_BarCodeReadOpt.ulSearchType = BARCODE_1D_READ_ANYTYPE; SetRect(&m_BarCodeReadOpt.rcSearch, 0, 0, 0, 0); m_BarCodeReadOpt.BarColor.dwColorBar = RGB(0, 0, 0); m_BarCodeReadOpt.BarColor.dwColorSpace = RGB(255, 255, 255); // Set Initial values for Write Dlg #ifndef UNICODE m_nWSymbType = BARCODE_LINEAR; #else m_nWSymbType = BARCODE_PDF; #endif memset(&m_WBarData, 0, sizeof(BARCODEDATA)); m_WBarData.uStructSize = sizeof(BARCODEDATA); m_WBarData.nUnits = BARCODE_SCANLINES_PER_PIXELS; SetRect(&m_WBarData.rcBarLocation, 50, 50, 400, 150); m_ulFlags = 0; memset(&m_WBar1D, 0, sizeof(BARCODE1D)); m_WBar1D.uStructSize = sizeof(BARCODE1D); m_WBar1D.bOutShowText = TRUE; m_WBar1D.bErrorCheck = TRUE; memset(&m_WBarPDF, 0, sizeof(BARCODEWRITEPDF)); memset(&m_WBarDM, 0, sizeof(BARCODEWRITEDM)); m_WBarPDF.uStructSize = sizeof(BARCODEWRITEPDF); m_WBarDM.uStructSize = sizeof(BARCODEWRITEDM); memset(&m_WBarColor, 0, sizeof(m_WBarColor)); m_WBarColor.uStructSize = sizeof(m_WBarColor); m_WBarColor.dwColorBar = RGB(0, 0, 0); m_WBarColor.dwColorSpace = RGB(255, 255, 255); m_WBarDM.nXModule = 30; memset(&m_WBarQR, 0, sizeof(BARCODEWRITEQR)); m_WBarQR.uStructSize = sizeof(BARCODEWRITEQR); m_WBarQR.nGroupNumber = 0; m_WBarQR.nGroupTotal = 0; m_WBarQR.nEccLevel = BARCODE_QR_ECC_L; m_WBarQR.nXModule = 30; } ///////////////////////////////////////////////////////////////////////////// // The one and only CBarCodeApp object CBarCodeApp theApp; ///////////////////////////////////////////////////////////////////////////// // CBarCodeApp initialization BOOL CBarCodeApp::InitInstance() { // 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. // 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(); // 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. CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_BARCODTYPE, RUNTIME_CLASS(CBarCodeDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CBarCodeView)); 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); //No Child window will be displayed if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) return FALSE; // The main window has been initialized, so show and update it. pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); m_LUserBitmap.Twain()->SetWindow(m_pMainWnd->m_hWnd); #ifndef UNICODE m_LUserBitmap.Isis()->SetWindow(m_pMainWnd->m_hWnd); #endif LDialogBase::Initialize(DLG_INIT_COLOR); m_bTwainAvailable = m_LUserBitmap.Twain()->IsAvailable(); #ifndef UNICODE m_bIsisAvailable = m_LUserBitmap.Isis()->IsAvailable(); #endif APPLICATIONDATA AppData; if (m_bTwainAvailable) { AppData.hWnd = m_pMainWnd->m_hWnd; AppData.uStructSize = sizeof(AppData); lstrcpy (AppData.szManufacturerName, _T("LEAD Technologies, Inc.")); lstrcpy (AppData.szAppProductFamily, _T("LEAD Test Applications")); lstrcpy (AppData.szVersionInfo, _T("Version 1.0")); lstrcpy (AppData.szAppName, _T("TWAIN Test Application")); m_LUserBitmap.Twain()->InitSession(&AppData); } 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 CBarCodeApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } ///////////////////////////////////////////////////////////////////////////// // CBarCodeApp message handlers BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); BARCODEVERSION BarVerInfo; /* LEAD BAR CODE Version Information structure. */ L_TCHAR szBuffer[1024]; /* Buffer to hold information for display. */ memset(&BarVerInfo, 0, sizeof(BARCODEVERSION)); memset(szBuffer, 0, sizeof(szBuffer)); /* Get the version information */ L_INT nRet = LBarCode::BarVersionInfo(&BarVerInfo, sizeof(BarVerInfo)); if (nRet == SUCCESS) { /* Format the message string with data from the BARCODEVERSION structure */ wsprintf(szBuffer, _T("LEAD Product: %hs\nVersion %d.%d\nDate: %hs\nTime: %hs"), (L_TCHAR L_FAR *)BarVerInfo.Product, BarVerInfo.MajorNumber, BarVerInfo.MinorNumber, (L_TCHAR L_FAR *)BarVerInfo.Date, (L_TCHAR L_FAR *)BarVerInfo.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 } int CBarCodeApp::ExitInstance() { if (m_bTwainAvailable) m_LUserBitmap.Twain()->EndSession(); LDialogBase::Free(); LBase::UnloadLibraries(m_ulLibs); m_ulLibs = 0; return CWinApp::ExitInstance(); } void CBarCodeApp::OnFileOpen() { OPENDLGPARAMS FOParm ; OPENFILENAME OpenFileName; memset ( &FOParm, 0, sizeof(OPENDLGPARAMS)) ; memset ( &OpenFileName, 0, sizeof(OPENFILENAME)) ; OpenFileName.lStructSize = sizeof(OPENFILENAME); OpenFileName.lpstrInitialDir = NULL; OpenFileName.Flags = OFN_EXPLORER; FOParm.uStructSize = sizeof(OPENDLGPARAMS); 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_DELPAGE | DLG_OPEN_VIEWTOTALPAGES; FOParm.bPreviewEnabled = TRUE; m_LUserBitmap.DialogFile()->SetOpenParams(&FOParm) ; m_LUserBitmap.DialogFile()->EnablePreview(TRUE); m_LUserBitmap.DialogFile()->SetOpenFileName(&OpenFileName) ; L_BOOL bOldState = m_LUserBitmap.DialogFile()->EnableAutoProcess(TRUE); m_LUserBitmap.EnableCallBack(FALSE); L_INT nRetCode = m_LUserBitmap.DialogFile()->DoModalOpen(m_pMainWnd->m_hWnd); if(nRetCode==SUCCESS_DLG_OK) { L_TCHAR szFileName[256]; memset(szFileName,0,sizeof(szFileName)); L_UINT uSize=sizeof(szFileName); m_LUserBitmap.GetFileName(szFileName,&uSize); POSITION pos = GetFirstDocTemplatePosition(); CDocTemplate* pDocTemplate = GetNextDocTemplate(pos); pDocTemplate->OpenDocumentFile(szFileName); } else if(nRetCode==ERROR_PDF_BAD_INITIALIZATION_FILES) { if( IDYES == MessageBox ( m_pMainWnd->m_hWnd,TEXT("LEADTOOLS PDF plugin is not found, do you want to download the plugin now?"), TEXT("Open File"),MB_ICONEXCLAMATION | MB_YESNO)) { ShellExecute(m_pMainWnd->m_hWnd, TEXT("open"), TEXT("http://www.leadtools.com/ReleaseDownloads/v14/LEADTOOLSPDFRuntime.exe"), NULL, NULL, SW_SHOWNORMAL); } } } void CBarCodeApp::OnFileNew() { CDlgNew * pDlgNew; pDlgNew = new CDlgNew(); if (pDlgNew->DoModal() == IDOK) { if (m_LUserBitmap.Create(pDlgNew->m_nWidth, pDlgNew->m_nHeight, 1, ORDER_BGR) == SUCCESS) { if (m_LUserBitmap.Fill(RGB(255, 255, 255)) == SUCCESS) CreateNewBitmapWindow(_T("New Image"), &m_LUserBitmap); } } delete pDlgNew; } void CBarCodeApp::OnFileTwainSelSrc() { m_LUserBitmap.Twain()->SelectSource(NULL); } void CBarCodeApp::OnUpdateFileTwainSelSrc(CCmdUI* pCmdUI) { pCmdUI->Enable(m_bTwainAvailable); } void CBarCodeApp::OnFileTwainAcquire() { m_bTwainStarted = TRUE; L_INT nRet; BITMAPHANDLE TwainBtm; memset(&TwainBtm,0,sizeof(BITMAPHANDLE)); TwainBtm.uStructSize = sizeof(BITMAPHANDLE); m_LUserBitmap.Twain()->EnableCallBack(TRUE); pBITMAPHANDLE pBitmap=NULL; nRet = m_LUserBitmap.Twain()->Acquire(pBitmap, sizeof(BITMAPHANDLE), LTWAIN_SHOW_USER_INTERFACE, NULL); if (nRet != SUCCESS) MessageBox(NULL, _T(" The image acquisition process failed!"), _T("Error"), MB_OK); m_bTwainStarted = FALSE; } void CBarCodeApp::OnUpdateFileTwainAcquire(CCmdUI* pCmdUI) { pCmdUI->Enable((m_bTwainAvailable) && (!m_bTwainStarted)); } void CBarCodeApp::OnFileIsisSelSrc() { #ifndef UNICODE if (m_LUserBitmap.Isis()->Select(m_szCurScanDriver) != SUCCESS) m_LUserBitmap.DisplayErrorFromList(m_pMainWnd->m_hWnd,LEAD_LAST_ERROR); #endif // UNICODE } void CBarCodeApp::OnUpdateFileIsisSelSrc(CCmdUI* pCmdUI) { #ifndef UNICODE pCmdUI->Enable(m_bIsisAvailable); #endif // UNICODE } void CBarCodeApp::OnFileIsisAcquire() { #ifndef UNICODE m_bISISStarted = TRUE; L_TCHAR * pCurScanDriver = NULL; if (m_szCurScanDriver[0] != 0) pCurScanDriver = m_szCurScanDriver; L_INT nRetCode = m_LUserBitmap.Isis()->LoadDriver(pCurScanDriver); if (nRetCode == SUCCESS) { if (m_LUserBitmap.Isis()->Acquire(ISIS_SHOWUI)==SUCCESS) CreateNewBitmapWindow("Scan from ISIS",&m_LUserBitmap); else m_LUserBitmap.DisplayErrorFromList(m_pMainWnd->m_hWnd, LEAD_LAST_ERROR); m_LUserBitmap.Isis()->UnloadDriver(); } if (nRetCode != SUCCESS) m_LUserBitmap.DisplayErrorFromList(m_pMainWnd->m_hWnd, LEAD_LAST_ERROR); m_bISISStarted = FALSE; #endif //UNICODE } void CBarCodeApp::OnUpdateFileIsisAcquire(CCmdUI* pCmdUI) { #ifndef UNICODE pCmdUI->Enable((m_bIsisAvailable) && (!m_bISISStarted)); #endif // UNICODE } void CBarCodeApp::OnEditPaste() { if (m_LUserBitmap.IsClipboardReady()) { if (m_LUserBitmap.CopyFromClipboard(m_pMainWnd->m_hWnd) == SUCCESS) CreateNewBitmapWindow(_T("Paste"),&m_LUserBitmap); } } void CBarCodeApp::OnUpdateEditPaste(CCmdUI* pCmdUI) { pCmdUI->Enable(m_LUserBitmap.IsClipboardReady()); } void CBarCodeApp::OnWindowCloseAll() { CloseAllDocuments(FALSE); } void CBarCodeApp::CreateNewBitmapWindow(LPTSTR lpCaption, LBitmapBase* pLBitmapSrc) { if (pLBitmapSrc == NULL) { m_LUserBitmap.DisplayError(m_pMainWnd->m_hWnd,_T("Error: Create window")); return ; } memset(&m_szCaption,0,sizeof(m_szCaption)); m_LUserBitmap.SetHandle(pLBitmapSrc->GetHandle()); if (lpCaption==NULL) lstrcpy(m_szCaption,_T("LEAD Bitmap")); else memmove(m_szCaption,lpCaption,min(sizeof(m_szCaption),lstrlen(lpCaption) * sizeof(L_TCHAR))); if (m_LUserBitmap.IsAllocated()==TRUE) CWinApp::OnFileNew(); } void CBarCodeApp::OnFileAllError() { LBase::DisplayErrorList(m_pMainWnd->m_hWnd); } void CBarCodeApp::OnUpdateFileAllError(CCmdUI* pCmdUI) { pCmdUI->Enable(LBase::GetErrorsNumber()); }