// BarView.cpp : implementation of the CBarCodeView class // #include "stdafx.h" #include "BarCode.h" #include "BarDoc.h" #include "BarView.h" #include "BarROpt.h" #include "BarWOpt.h" #include "DlgFLog.h" #include "DupIndx.h" #include "windowsx.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CBarCodeView IMPLEMENT_DYNCREATE(CBarCodeView, CView) BEGIN_MESSAGE_MAP(CBarCodeView, CView) //{{AFX_MSG_MAP(CBarCodeView) ON_WM_CREATE() ON_COMMAND(ID_EDIT_COPY, OnEditCopy) ON_COMMAND(ID_ACTION_READ, OnActionRead) ON_COMMAND(ID_ACTION_WRITE, OnActionWrite) ON_COMMAND(ID_ACTION_DUPLICATEDINFO_FIRST, OnActionDupInfoFirst) ON_COMMAND(ID_ACTION_DUPLICATEDINFO_NEXT, OnActionDupInfoNext) ON_UPDATE_COMMAND_UI(ID_ACTION_DUPLICATEDINFO_NEXT, OnUpdateActionDupInfoNext) ON_COMMAND(ID_ACTIONS_SETLOGFILE, OnActionsSetLogFile) ON_COMMAND(ID_ACTIONS_OPENLOGFILE, OnActionsOpenLogFile) ON_UPDATE_COMMAND_UI(ID_ACTIONS_OPENLOGFILE, OnUpdateActionsOpenLogFile) ON_COMMAND(ID_VIEW_SELECT_RGN, OnViewSelectRgn) ON_COMMAND(ID_VIEW_CANCEL_RGN, OnViewCancelRgn) ON_UPDATE_COMMAND_UI(ID_VIEW_CANCEL_RGN, OnUpdateViewCancelRgn) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_TIMER() ON_UPDATE_COMMAND_UI(ID_ACTION_DUPLICATEDINFO_FIRST, OnUpdateActionDupInfoFirst) ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs) //}}AFX_MSG_MAP ON_MESSAGE(WM_HANDLEPALETTE,OnHandlePalette) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBarCodeView construction/destruction CBarCodeView::CBarCodeView() { m_prcBarLocation = NULL; m_nDupIndex = -1; m_bIsIndexDuplicated = FALSE; m_pBarCodeData = NULL; m_uTimerID = 0; m_bLBtnDown = FALSE; } CBarCodeView::~CBarCodeView() { } BOOL CBarCodeView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CBarCodeView drawing void CBarCodeView::OnDraw(CDC* pDC) { CBarCodeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } void CBarCodeView::OnInitialUpdate() { m_LeadBmpWnd.SetAutoRgnToFloater(FALSE); m_LeadBmpWnd.EnableKeyBoard(FALSE); m_LeadBmpWnd.EnableCenterOnZoom(FALSE); CView::OnInitialUpdate(); } ///////////////////////////////////////////////////////////////////////////// // CBarCodeView diagnostics #ifdef _DEBUG void CBarCodeView::AssertValid() const { CView::AssertValid(); } void CBarCodeView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CBarCodeDoc* CBarCodeView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBarCodeDoc))); return (CBarCodeDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CBarCodeView message handlers int CBarCodeView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; if (m_LeadBmpWnd.SetWndHandle(GetSafeHwnd()) != SUCCESS) { LBase::DisplayErrorFromList(GetSafeHwnd()); return -1; } return 0; } void CBarCodeView::OnEditCopy() { m_LeadBmpWnd.CopyToClipboard(m_hWnd, COPY2CB_EMPTY|COPY2CB_DIB|COPY2CB_DDB|COPY2CB_PALETTE); } void CBarCodeView::OnActionRead() { if (m_strLogFileName.IsEmpty()) { L_INT nID = MessageBox(_T("No log file entered, Are you sure?"), _T("Notice!"), MB_YESNO); if (nID == IDNO) return; } CBarCodeApp * pTheApp = (CBarCodeApp *)AfxGetApp(); if (!pTheApp) return; CBarReadOpt * pBarROpt = new CBarReadOpt(this, pTheApp->m_nSymbolType, &pTheApp->m_BarCodeReadOpt, &pTheApp->m_BarCode1D, &pTheApp->m_BarCodePDF); if (pBarROpt->DoModal() == IDOK) { BeginWaitCursor(); SetRect(&pTheApp->m_BarCodeReadOpt.rcSearch, pBarROpt->m_nStartX, pBarROpt->m_nStartY, pBarROpt->m_nWidth + pBarROpt->m_nStartX, pBarROpt->m_nHeight + pBarROpt->m_nStartY); pTheApp->m_BarCodeReadOpt.ulSearchType = 0; pTheApp->m_BarCodeReadOpt.nMultipleMax = pBarROpt->m_nMultipleMax; pTheApp->m_BarCodeReadOpt.nUnits = pBarROpt->m_nUnits; pTheApp->m_BarCodeReadOpt.bUseRgn = pBarROpt->m_bUseRgn; pTheApp->m_BarCodeReadOpt.ulFlags = (pBarROpt->m_bUseColors) ? BARCODE_USECOLORS : 0; pTheApp->m_BarCodeReadOpt.BarColor.dwColorBar = pBarROpt->m_BarColor.dwColorBar; pTheApp->m_BarCodeReadOpt.BarColor.dwColorSpace = pBarROpt->m_BarColor.dwColorSpace; pTheApp->m_nSymbolType = pBarROpt->m_nSymbolType; if (pBarROpt->m_nSymbolType == BARCODE_LINEAR) { pTheApp->m_BarCode1D.bErrorCheck = pBarROpt->m_bErrDigit; pTheApp->m_BarCode1D.nGranularity = pBarROpt->m_nGranularity; pTheApp->m_BarCode1D.nMinLength = pBarROpt->m_nMinLength; pTheApp->m_BarCode1D.nWhiteLines = pBarROpt->m_nWhiteLines; pTheApp->m_BarCode1D.nDirection = 0; if (pBarROpt->m_bDirBtmToTop) pTheApp->m_BarCode1D.nDirection |= BARCODE_DIR_BOTTOM_TO_TOP; if (pBarROpt->m_bDirLefToRight) pTheApp->m_BarCode1D.nDirection |= BARCODE_DIR_LEFT_TO_RIGHT; if (pBarROpt->m_bDirRightToLeft) pTheApp->m_BarCode1D.nDirection |= BARCODE_DIR_RIGHT_TO_LEFT; if (pBarROpt->m_bDirTopToBtm) pTheApp->m_BarCode1D.nDirection |= BARCODE_DIR_TOP_TO_BOTTOM; if (pBarROpt->m_bSearchAll) pTheApp->m_BarCodeReadOpt.ulSearchType = BARCODE_1D_READ_ANYTYPE; else { if (pBarROpt->m_bType1) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_EAN_13; if (pBarROpt->m_bType2) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_EAN_8; if (pBarROpt->m_bType3) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_UPC_A; if (pBarROpt->m_bType4) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_UPC_E; if (pBarROpt->m_bType5) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_CODE_3_OF_9; if (pBarROpt->m_bType6) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_CODE_128; if (pBarROpt->m_bType7) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_CODE_I2_OF_5; if (pBarROpt->m_bType8) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_CODA_BAR; if (pBarROpt->m_bType9) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_UCCEAN_128; if (pBarROpt->m_bType10) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_1D_CODE_93; } } else { if (pBarROpt->m_nSymbolType == BARCODE_PDF) { pTheApp->m_BarCodeReadOpt.ulSearchType = BARCODE_PDF417; pTheApp->m_BarCodePDF.nDirection = 0; if (pBarROpt->m_bDirBtmToTop) pTheApp->m_BarCodePDF.nDirection |= BARCODE_DIR_BOTTOM_TO_TOP; if (pBarROpt->m_bDirLefToRight) pTheApp->m_BarCodePDF.nDirection |= BARCODE_DIR_LEFT_TO_RIGHT; if (pBarROpt->m_bDirRightToLeft) pTheApp->m_BarCodePDF.nDirection |= BARCODE_DIR_RIGHT_TO_LEFT; if (pBarROpt->m_bDirTopToBtm) pTheApp->m_BarCodePDF.nDirection |= BARCODE_DIR_TOP_TO_BOTTOM; } else if (pBarROpt->m_nSymbolType == BARCODE_QR) pTheApp->m_BarCodeReadOpt.ulSearchType = BARCODE_QR_CODE; else if (pBarROpt->m_nSymbolType == BARCODE_DATAMATRIX) { if(pBarROpt->m_bType1) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_DM_READ_SQUARE; if(pBarROpt->m_bType2) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_DM_READ_RECTANGLE; if(pBarROpt->m_bType3) pTheApp->m_BarCodeReadOpt.ulSearchType |= BARCODE_DM_READ_SMALL; if (pBarROpt->m_bSearchAll) pTheApp->m_BarCodeReadOpt.ulSearchType = BARCODE_DM_READ_SQUARE | BARCODE_DM_READ_RECTANGLE | BARCODE_DM_READ_SMALL; } } L_INT nRet = m_LeadBmpWnd.BarCode()->SetReadOptions(&pTheApp->m_BarCodeReadOpt); if (nRet != SUCCESS) return; nRet = m_LeadBmpWnd.BarCode()->Read(pBarROpt->m_nSymbolType, &pTheApp->m_BarCode1D, &pTheApp->m_BarCodePDF); if (nRet > 0) { m_pBarCodeData = m_LeadBmpWnd.BarCode()->GetBarCodeDataItem(0); if (!m_pBarCodeData) return; CStdioFile * pStdFile = NULL; L_TCHAR L_FAR* pszBuffer = NULL; L_INT nBarTotal = m_pBarCodeData[0].nTotalCount; pszBuffer = (L_TCHAR L_FAR *)GlobalAllocPtr(GHND, m_pBarCodeData[0].nSizeofBarCodeData + MAX_BUFFER_SIZE); if (!pszBuffer) { MessageBox(_T("Not enough memory."), _T("Error!")); return; } if (!m_strLogFileName.IsEmpty()) { pStdFile = new CStdioFile(m_strLogFileName , CFile::modeCreate | CFile::modeWrite | CFile::typeText); if (!pStdFile) { wsprintf(pszBuffer, _T("You can not print the Bar Codes results on the Log File.")); MessageBox(pszBuffer, _T("Error!"), MB_OK); } } wsprintf(pszBuffer, _T("Total Bar Code Symbols Found is: %d\n\n"), nBarTotal); if (pStdFile) pStdFile->WriteString(pszBuffer); else MessageBox(pszBuffer, _T("Notice!")); for (L_INT i=0; i< nBarTotal; i++) { pszBuffer = (L_TCHAR L_FAR *)GlobalReAllocPtr(pszBuffer, m_pBarCodeData[i].nSizeofBarCodeData + MAX_BUFFER_SIZE, GHND); if (!pszBuffer) { MessageBox(_T("Not enough memory."), _T("Error!")); return; } memset(pszBuffer, 0, m_pBarCodeData[i].nSizeofBarCodeData + MAX_BUFFER_SIZE); GetBarCodeDataInfo(i, pszBuffer); if (pStdFile) pStdFile->WriteString(pszBuffer); else MessageBox(pszBuffer, _T("BarCode Info.")); } if (pszBuffer) GlobalFreePtr(pszBuffer); if (pStdFile) { pStdFile->Close(); delete pStdFile; } } else { LBase::DisplayErrorFromList(GetSafeHwnd()); if (m_pBarCodeData) m_pBarCodeData = NULL; } EndWaitCursor(); } delete pBarROpt; } void CBarCodeView::OnActionWrite() { CBarCodeApp * pTheApp = (CBarCodeApp *)AfxGetApp(); if (!pTheApp) return; LPSTR pszUncodeBarData = NULL; CBarWriteOpt * pBarWOpt = new CBarWriteOpt(this, &pTheApp->m_WBarData, &pTheApp->m_WBarColor, pTheApp->m_ulFlags, &pTheApp->m_WBar1D, &pTheApp->m_WBarPDF, &pTheApp->m_WBarDM, &pTheApp->m_WBarQR); if (pBarWOpt->DoModal() == IDOK) { BeginWaitCursor(); pTheApp->m_ulFlags = 0; pTheApp->m_WBarData.rcBarLocation.left = pBarWOpt->m_nStartX; pTheApp->m_WBarData.rcBarLocation.top = pBarWOpt->m_nStartY; pTheApp->m_WBarData.rcBarLocation.right = pBarWOpt->m_nStartX + pBarWOpt->m_nWidth; pTheApp->m_WBarData.rcBarLocation.bottom = pBarWOpt->m_nStartY + pBarWOpt->m_nHeight; pTheApp->m_WBarData.nUnits = pBarWOpt->m_nUnits; pTheApp->m_WBarData.ulType = pBarWOpt->m_ulBarType; switch (pTheApp->m_nWSymbType) { case BARCODE_LINEAR: pTheApp->m_WBar1D.bErrorCheck = pBarWOpt->m_bChkOpt1; pTheApp->m_WBar1D.bOutShowText= pBarWOpt->m_bChkOpt2; break; case BARCODE_DATAMATRIX: if (pBarWOpt->m_bChkOpt1) pTheApp->m_ulFlags |= BARCODE_INITREADER; if (pBarWOpt->m_bChkOpt2) pTheApp->m_ulFlags |= BARCODE_DISABLE_COMPRESSOPN; pTheApp->m_WBarDM.ulFlags = 0; if (pBarWOpt->m_bJustifyBottom) pTheApp->m_WBarDM.ulFlags |= BARCODE_JUSTIFY_BOTTOM; if (pBarWOpt->m_bJustifyRight) pTheApp->m_WBarDM.ulFlags |= BARCODE_JUSTIFY_RIGHT; if (pBarWOpt->m_bJustifyHCenter) pTheApp->m_WBarDM.ulFlags |= BARCODE_JUSTIFY_H_CENTER; if (pBarWOpt->m_bJustifyVCenter) pTheApp->m_WBarDM.ulFlags |= BARCODE_JUSTIFY_V_CENTER; pTheApp->m_WBarDM.cGroupNumber = pBarWOpt->m_ucGrpNumber; pTheApp->m_WBarDM.cGroupTotal = pBarWOpt->m_ucGrpTotal; pTheApp->m_WBarDM.cFileIDLo = (L_CHAR)pBarWOpt->m_ucFileIdL; pTheApp->m_WBarDM.cFileIDHi = (L_CHAR)pBarWOpt->m_ucFileIdH; pTheApp->m_WBarDM.nXModule = pBarWOpt->m_nXModule; break; case BARCODE_PDF: if (pBarWOpt->m_bChkOpt1) pTheApp->m_ulFlags |= BARCODE_TRUNCATE; if (pBarWOpt->m_bChkOpt2) pTheApp->m_ulFlags |= BARCODE_INITREADER; if (pBarWOpt->m_bChkOpt3) pTheApp->m_ulFlags |= BARCODE_COLROWASLIMITS; pTheApp->m_WBarPDF.nJustify = 0; if (pBarWOpt->m_bJustifyBottom) pTheApp->m_WBarPDF.nJustify |= BARCODE_JUSTIFY_BOTTOM; if (pBarWOpt->m_bJustifyRight) pTheApp->m_WBarPDF.nJustify |= BARCODE_JUSTIFY_RIGHT; if (pBarWOpt->m_bJustifyHCenter) pTheApp->m_WBarPDF.nJustify |= BARCODE_JUSTIFY_H_CENTER; if (pBarWOpt->m_bJustifyVCenter) pTheApp->m_WBarPDF.nJustify |= BARCODE_JUSTIFY_V_CENTER; pTheApp->m_WBarPDF.wAspectHeight = pBarWOpt->m_nAspectHeight; pTheApp->m_WBarPDF.wAspectWidth = pBarWOpt->m_nAspectWidth; pTheApp->m_WBarPDF.wEccPerc = pBarWOpt->m_nEccPercent; pTheApp->m_WBarPDF.wEccLevel = pBarWOpt->m_nEccLevelData; pTheApp->m_WBarPDF.wColumns = pBarWOpt->m_nCols; pTheApp->m_WBarPDF.wModAspectRatio = pBarWOpt->m_nModuleRatio; pTheApp->m_WBarPDF.wModule = pBarWOpt->m_nModuleX; pTheApp->m_WBarPDF.wRows = pBarWOpt->m_nRows; break; case BARCODE_QR: if (pBarWOpt->m_bChkOpt1) pTheApp->m_ulFlags |= BARCODE_INITREADER; if (pBarWOpt->m_bChkOpt2) pTheApp->m_ulFlags |= BARCODE_DISABLE_COMPRESSOPN; pTheApp->m_WBarQR.ulFlags = 0; if (pBarWOpt->m_bJustifyBottom) pTheApp->m_WBarQR.ulFlags |= BARCODE_JUSTIFY_BOTTOM; if (pBarWOpt->m_bJustifyRight) pTheApp->m_WBarQR.ulFlags |= BARCODE_JUSTIFY_RIGHT; if (pBarWOpt->m_bJustifyHCenter) pTheApp->m_WBarQR.ulFlags |= BARCODE_JUSTIFY_H_CENTER; if (pBarWOpt->m_bJustifyVCenter) pTheApp->m_WBarQR.ulFlags |= BARCODE_JUSTIFY_V_CENTER; pTheApp->m_WBarQR.nXModule = pBarWOpt->m_nXModule; pTheApp->m_WBarQR.nEccLevel = pBarWOpt->m_nQREccLevel; pTheApp->m_WBarQR.nXModule = pBarWOpt->m_nQRXModule; pTheApp->m_WBarQR.nGroupNumber = pBarWOpt->m_nQRGrpNum; pTheApp->m_WBarQR.nGroupTotal = pBarWOpt->m_nQRGrpTot; break; } { // BAR DATA pTheApp->m_WBarData.nSizeofBarCodeData = strlen ( pBarWOpt->m_szBarData ) ; pTheApp->m_WBarData.pszBarCodeData = (L_CHAR *)(LPCSTR)pBarWOpt->m_szBarData; } // BAR DATA if (pBarWOpt->m_bEnableTransparent) pTheApp->m_ulFlags |= BARCODE_TRANSPARENT; if (pBarWOpt->m_bUseColors) pTheApp->m_ulFlags |= BARCODE_USECOLORS; pTheApp->m_WBarColor.dwColorBar = pBarWOpt->m_BarColor.dwColorBar; pTheApp->m_WBarColor.dwColorSpace = pBarWOpt->m_BarColor.dwColorSpace; L_INT nRet = m_LeadBmpWnd.BarCode()->WriteExt2(&pTheApp->m_WBarData, pTheApp->m_ulFlags, &pTheApp->m_WBarColor, &pTheApp->m_WBar1D, &pTheApp->m_WBarPDF, &pTheApp->m_WBarDM, &pTheApp->m_WBarQR); if (nRet == SUCCESS) RedrawWindow(); else LBase::DisplayErrorFromList(GetSafeHwnd()); EndWaitCursor(); } delete pBarWOpt; if ( NULL != pszUncodeBarData ) { delete [] pszUncodeBarData ; pszUncodeBarData = NULL; } } void CBarCodeView::OnActionDupInfoFirst() { CDupIndex * pDupIndexDlg; pDupIndexDlg = new CDupIndex(); if (pDupIndexDlg->DoModal() == IDOK) { BeginWaitCursor(); m_nDupIndex = pDupIndexDlg->m_nIndex; if (m_nDupIndex >= m_pBarCodeData[0].nTotalCount) m_nDupIndex = m_pBarCodeData[0].nTotalCount - 1; m_bIsIndexDuplicated = m_LeadBmpWnd.BarCode()->IsDuplicated(m_nDupIndex); if (m_bIsIndexDuplicated) { m_nDupIndex = m_LeadBmpWnd.BarCode()->GetFirstDuplicated(m_nDupIndex); if (m_nDupIndex >= 0) { L_TCHAR L_FAR * pszBuffer = NULL; pszBuffer = (L_TCHAR L_FAR *)GlobalAllocPtr(GHND, m_pBarCodeData[m_nDupIndex].nSizeofBarCodeData + MAX_BUFFER_SIZE); if (!pszBuffer) { MessageBox(_T("Not enough memory."), _T("Error!")); return; } GetBarCodeDataInfo(m_nDupIndex, pszBuffer); MessageBox(pszBuffer, _T("Notice!")); if (pszBuffer) GlobalFreePtr(pszBuffer); } else LBase::DisplayErrorFromList(GetSafeHwnd()); } else { L_TCHAR szBuffer[MAX_BUFFER_SIZE]; memset(szBuffer, 0, sizeof(szBuffer)); wsprintf(szBuffer, _T("The Bar Code selected by index was not duplicated")); MessageBox(szBuffer, _T("Error!")); } EndWaitCursor(); } delete pDupIndexDlg; } void CBarCodeView::OnUpdateActionDupInfoFirst(CCmdUI* pCmdUI) { pCmdUI->Enable((m_pBarCodeData == NULL) ? FALSE:TRUE); } void CBarCodeView::OnActionDupInfoNext() { BeginWaitCursor(); m_nDupIndex = m_LeadBmpWnd.BarCode()->GetNextDuplicated(m_nDupIndex); if (m_nDupIndex >= 0) { L_TCHAR L_FAR * pszBuffer = NULL; pszBuffer = (L_TCHAR L_FAR *)GlobalAllocPtr(GHND, m_pBarCodeData[m_nDupIndex].nSizeofBarCodeData + MAX_BUFFER_SIZE); if (!pszBuffer) { MessageBox(_T("Not enough memory."), _T("Error!")); return; } GetBarCodeDataInfo(m_nDupIndex, pszBuffer); MessageBox(pszBuffer, _T("Notice!")); if (pszBuffer) GlobalFreePtr(pszBuffer); } else LBase::DisplayErrorFromList(GetSafeHwnd()); EndWaitCursor(); } void CBarCodeView::OnUpdateActionDupInfoNext(CCmdUI* pCmdUI) { pCmdUI->Enable(m_bIsIndexDuplicated); } void CBarCodeView::OnActionsSetLogFile() { CDlgLogFile *pDlgLogFile; pDlgLogFile = new CDlgLogFile(); if (pDlgLogFile->DoModal() == IDOK) m_strLogFileName = pDlgLogFile->m_strFileName; delete pDlgLogFile; } void CBarCodeView::OnActionsOpenLogFile() { if (_taccess(m_strLogFileName, 0) == -1) { AfxMessageBox(_T("The Log file is not created yet...")); return; } BeginWaitCursor(); // '32' is documentation number there is no constant to use here if ( 32 > (int)ShellExecute(GetSafeHwnd(), _T("open"), m_strLogFileName, NULL, NULL, SW_SHOWNORMAL) ) { AfxMessageBox(_T("Can't Open Log file!")); } EndWaitCursor(); } void CBarCodeView::OnUpdateActionsOpenLogFile(CCmdUI* pCmdUI) { pCmdUI->Enable((m_strLogFileName.IsEmpty()) ? FALSE : TRUE); } void CBarCodeView::OnViewSelectRgn() { m_LeadBmpWnd.SetToolType(TOOL_REGION); m_LeadBmpWnd.SetRegionType(REGION_TYPE_RECT); } void CBarCodeView::OnViewCancelRgn() { if(m_uTimerID) KillTimer(m_uTimerID); if (m_LeadBmpWnd.HasRgn()) { m_LeadBmpWnd.Region()->Free(); m_LeadBmpWnd.SetToolType(TOOL_USERMODE); InvalidateRect(NULL); UpdateWindow(); } } void CBarCodeView::OnUpdateViewCancelRgn(CCmdUI* pCmdUI) { pCmdUI->Enable(m_LeadBmpWnd.HasRgn()); } void CBarCodeView::GetBarCodeDataInfo(L_INT nIndex, L_TCHAR L_FAR * pszBarInfo) { L_TCHAR szUnits[50]; L_TCHAR szBarType[50]; L_CHAR *pszDestBuff=NULL; memset(szUnits, 0, sizeof(szUnits)); memset(szBarType, 0, sizeof(szBarType)); GetBarTypeStr(m_pBarCodeData[nIndex].ulType, szBarType); GetBarUnitsStr(m_pBarCodeData[nIndex].nUnits, szUnits); pszDestBuff = (L_CHAR L_FAR *)GlobalAllocPtr(GHND, m_pBarCodeData[nIndex].nSizeofBarCodeData + 1); if (!pszDestBuff) return; ConvertNULLString(m_pBarCodeData[nIndex].pszBarCodeData, pszDestBuff, m_pBarCodeData[nIndex].nSizeofBarCodeData); wsprintf(pszBarInfo, _T("No. %d\nData is %hs\nType %s\nUnits %s\nPosX %d\nPosY %d\nWidth %d\nHeight %d\n\n"), nIndex, pszDestBuff, szBarType, szUnits, m_pBarCodeData[nIndex].rcBarLocation.left, m_pBarCodeData[nIndex].rcBarLocation.top, abs(m_pBarCodeData[nIndex].rcBarLocation.right - m_pBarCodeData[nIndex].rcBarLocation.left), abs(m_pBarCodeData[nIndex].rcBarLocation.bottom - m_pBarCodeData[nIndex].rcBarLocation.top)); GlobalFreePtr(pszDestBuff); } void CBarCodeView::GetBarTypeStr(L_UINT32 ulBarType, L_TCHAR * pszBarStr) { switch (ulBarType) { case BARCODE_1D_EAN_13: wsprintf(pszBarStr, _T("EAN 13")); break; case BARCODE_1D_EAN_8: wsprintf(pszBarStr, _T("EAN 8")); break; case BARCODE_1D_UPC_A: wsprintf(pszBarStr, _T("UPC A")); break; case BARCODE_1D_UPC_E: wsprintf(pszBarStr, _T("UPC E")); break; case BARCODE_1D_CODE_3_OF_9: wsprintf(pszBarStr, _T("Code 3 of 9")); break; case BARCODE_1D_CODE_128: wsprintf(pszBarStr, _T("Code 128")); break; case BARCODE_1D_CODE_I2_OF_5: wsprintf(pszBarStr, _T("Interleaved 2 of 5")); break; case BARCODE_1D_CODA_BAR: wsprintf(pszBarStr, _T("CODABAR")); break; case BARCODE_1D_UCCEAN_128: wsprintf(pszBarStr, _T("UCCEAN 128")); break; case BARCODE_1D_CODE_93: wsprintf(pszBarStr, TEXT("Code 93")); break; case BARCODE_PDF417: wsprintf(pszBarStr, _T("PDF417")); break; case BARCODE_DM_DEF: wsprintf(pszBarStr, _T("DM Default")); break; case BARCODE_DM_10x10: wsprintf(pszBarStr, _T("DM 10x10")); break; case BARCODE_DM_12x12: wsprintf(pszBarStr, _T("DM 12x12")); break; case BARCODE_DM_14x14: wsprintf(pszBarStr, _T("DM 14x14")); break; case BARCODE_DM_16x16: wsprintf(pszBarStr, _T("DM 16x16")); break; case BARCODE_DM_18x18: wsprintf(pszBarStr, _T("DM 18x18")); break; case BARCODE_DM_20x20: wsprintf(pszBarStr, _T("DM 20x20")); break; case BARCODE_DM_22x22: wsprintf(pszBarStr, _T("DM 22x22")); break; case BARCODE_DM_24x24: wsprintf(pszBarStr, _T("DM 24x24")); break; case BARCODE_DM_26x26: wsprintf(pszBarStr, _T("DM 26x26")); break; case BARCODE_DM_32x32: wsprintf(pszBarStr, _T("DM 32x32")); break; case BARCODE_DM_36x36: wsprintf(pszBarStr, _T("DM 36x36")); break; case BARCODE_DM_40x40: wsprintf(pszBarStr, _T("DM 40x40")); break; case BARCODE_DM_44x44: wsprintf(pszBarStr, _T("DM 44x44")); break; case BARCODE_DM_48x48: wsprintf(pszBarStr, _T("DM 48x48")); break; case BARCODE_DM_52x52: wsprintf(pszBarStr, _T("DM 52x52")); break; case BARCODE_DM_64x64: wsprintf(pszBarStr, _T("DM 64x64")); break; case BARCODE_DM_72x72: wsprintf(pszBarStr, _T("DM 72x72")); break; case BARCODE_DM_80x80: wsprintf(pszBarStr, _T("DM 80x80")); break; case BARCODE_DM_88x88: wsprintf(pszBarStr, _T("DM 88x88")); break; case BARCODE_DM_96x96: wsprintf(pszBarStr, _T("DM 96x96")); break; case BARCODE_DM_104x104: wsprintf(pszBarStr, _T("DM 10x104")); break; case BARCODE_DM_120x120: wsprintf(pszBarStr, _T("DM 120x120")); break; case BARCODE_DM_132x132: wsprintf(pszBarStr, _T("DM 132x132")); break; case BARCODE_DM_144x144: wsprintf(pszBarStr, _T("DM 144x144")); break; case BARCODE_DM_8x18: wsprintf(pszBarStr, _T("DM 8x18")); break; case BARCODE_DM_8x32: wsprintf(pszBarStr, _T("DM 8x32")); break; case BARCODE_DM_12x26: wsprintf(pszBarStr, _T("DM 12x26")); break; case BARCODE_DM_12x36: wsprintf(pszBarStr, _T("DM 12x36")); break; case BARCODE_DM_16x36: wsprintf(pszBarStr, _T("DM 16x36")); break; case BARCODE_DM_16x48: wsprintf(pszBarStr, _T("DM 48x48")); break; case BARCODE_DM_WRITE_RECTANGLE: wsprintf(pszBarStr, _T("DM Default Rect")); break; case BARCODE_QR_DEF: wsprintf(pszBarStr, TEXT("QR DEF")); break; case BARCODE_QR_M2_1: wsprintf(pszBarStr, TEXT("QR M2 1")); break; case BARCODE_QR_M2_2: wsprintf(pszBarStr, TEXT("QR M2 2")); break; case BARCODE_QR_M2_3: wsprintf(pszBarStr, TEXT("QR M2 3")); break; case BARCODE_QR_M2_4: wsprintf(pszBarStr, TEXT("QR M2 4")); break; case BARCODE_QR_M2_5: wsprintf(pszBarStr, TEXT("QR M2 5")); break; case BARCODE_QR_M2_6: wsprintf(pszBarStr, TEXT("QR M2 6")); break; case BARCODE_QR_M2_7: wsprintf(pszBarStr, TEXT("QR M2 7")); break; case BARCODE_QR_M2_8: wsprintf(pszBarStr, TEXT("QR M2 8")); break; case BARCODE_QR_M2_9: wsprintf(pszBarStr, TEXT("QR M2 9")); break; case BARCODE_QR_M2_10: wsprintf(pszBarStr, TEXT("QR M2 10")); break; case BARCODE_QR_M2_11: wsprintf(pszBarStr, TEXT("QR M2 11")); break; case BARCODE_QR_M2_12: wsprintf(pszBarStr, TEXT("QR M2 12")); break; case BARCODE_QR_M2_13: wsprintf(pszBarStr, TEXT("QR M2 13")); break; case BARCODE_QR_M2_14: wsprintf(pszBarStr, TEXT("QR M2 14")); break; case BARCODE_QR_M2_15: wsprintf(pszBarStr, TEXT("QR M2 15")); break; case BARCODE_QR_M2_16: wsprintf(pszBarStr, TEXT("QR M2 16")); break; case BARCODE_QR_M2_17: wsprintf(pszBarStr, TEXT("QR M2 17")); break; case BARCODE_QR_M2_18: wsprintf(pszBarStr, TEXT("QR M2 18")); break; case BARCODE_QR_M2_19: wsprintf(pszBarStr, TEXT("QR M2 19")); break; case BARCODE_QR_M2_20: wsprintf(pszBarStr, TEXT("QR M2 20")); break; case BARCODE_QR_M2_21: wsprintf(pszBarStr, TEXT("QR M2 21")); break; case BARCODE_QR_M2_22: wsprintf(pszBarStr, TEXT("QR M2 22")); break; case BARCODE_QR_M2_23: wsprintf(pszBarStr, TEXT("QR M2 23")); break; case BARCODE_QR_M2_24: wsprintf(pszBarStr, TEXT("QR M2 24")); break; case BARCODE_QR_M2_25: wsprintf(pszBarStr, TEXT("QR M2 25")); break; case BARCODE_QR_M2_26: wsprintf(pszBarStr, TEXT("QR M2 26")); break; case BARCODE_QR_M2_27: wsprintf(pszBarStr, TEXT("QR M2 27")); break; case BARCODE_QR_M2_28: wsprintf(pszBarStr, TEXT("QR M2 28")); break; case BARCODE_QR_M2_29: wsprintf(pszBarStr, TEXT("QR M2 29")); break; case BARCODE_QR_M2_30: wsprintf(pszBarStr, TEXT("QR M2 30")); break; case BARCODE_QR_M2_31: wsprintf(pszBarStr, TEXT("QR M2 31")); break; case BARCODE_QR_M2_32: wsprintf(pszBarStr, TEXT("QR M2 32")); break; case BARCODE_QR_M2_33: wsprintf(pszBarStr, TEXT("QR M2 33")); break; case BARCODE_QR_M2_34: wsprintf(pszBarStr, TEXT("QR M2 34")); break; case BARCODE_QR_M2_35: wsprintf(pszBarStr, TEXT("QR M2 35")); break; case BARCODE_QR_M2_36: wsprintf(pszBarStr, TEXT("QR M2 36")); break; case BARCODE_QR_M2_37: wsprintf(pszBarStr, TEXT("QR M2 37")); break; case BARCODE_QR_M2_38: wsprintf(pszBarStr, TEXT("QR M2 38")); break; case BARCODE_QR_M2_39: wsprintf(pszBarStr, TEXT("QR M2 39")); break; case BARCODE_QR_M2_40: wsprintf(pszBarStr, TEXT("QR M2 40")); break; case BARCODE_QR_M1_1: wsprintf(pszBarStr, TEXT("QR M1 1")); break; case BARCODE_QR_M1_2: wsprintf(pszBarStr, TEXT("QR M1 2")); break; case BARCODE_QR_M1_3: wsprintf(pszBarStr, TEXT("QR M1 3")); break; case BARCODE_QR_M1_4: wsprintf(pszBarStr, TEXT("QR M1 4")); break; case BARCODE_QR_M1_5: wsprintf(pszBarStr, TEXT("QR M1 5")); break; case BARCODE_QR_M1_6: wsprintf(pszBarStr, TEXT("QR M1 6")); break; case BARCODE_QR_M1_7: wsprintf(pszBarStr, TEXT("QR M1 7")); break; case BARCODE_QR_M1_8: wsprintf(pszBarStr, TEXT("QR M1 8")); break; case BARCODE_QR_M1_9: wsprintf(pszBarStr, TEXT("QR M1 9")); break; case BARCODE_QR_M1_10: wsprintf(pszBarStr, TEXT("QR M1 10")); break; case BARCODE_QR_M1_11: wsprintf(pszBarStr, TEXT("QR M1 11")); break; case BARCODE_QR_M1_12: wsprintf(pszBarStr, TEXT("QR M1 12")); break; case BARCODE_QR_M1_13: wsprintf(pszBarStr, TEXT("QR M1 13")); break; case BARCODE_QR_M1_14: wsprintf(pszBarStr, TEXT("QR M1 14")); break; case BARCODE_QR_M1_DEF: wsprintf(pszBarStr, TEXT("QR M1 DEF")); break; } } void CBarCodeView::GetBarUnitsStr(L_INT nUnits, L_TCHAR * pszBarUnits) { switch (nUnits) { case BARCODE_SCANLINES_PER_PIXELS: wsprintf(pszBarUnits, _T("Scans/pixels")); break; case BARCODE_INCHES: wsprintf(pszBarUnits, _T("Inches")); break; case BARCODE_MILLIMETERS: wsprintf(pszBarUnits, _T("Millimeters")); break; } } void CBarCodeView::OnLButtonDown(UINT nFlags, CPoint point) { if(m_uTimerID) KillTimer(m_uTimerID); if (m_LeadBmpWnd.HasRgn()) { m_LeadBmpWnd.Region()->Free(); InvalidateRect(NULL); UpdateWindow(); } m_bLBtnDown = TRUE; CView::OnLButtonDown(nFlags, point); } void CBarCodeView::OnLButtonUp(UINT nFlags, CPoint point) { if ((m_bLBtnDown) && (m_LeadBmpWnd.HasRgn())) { RECT rcRgn; SetRect(&rcRgn, 0, 0, 0, 0); m_LeadBmpWnd.CancelRgn(); // cancel automatic floater creation m_LeadBmpWnd.Region()->GetRgnBounds(&rcRgn); if ((rcRgn.left == rcRgn.right) || (rcRgn.top == rcRgn.bottom)) { m_LeadBmpWnd.Region()->Free(); m_LeadBmpWnd.SetToolType(TOOL_USERMODE); return; } m_LeadBmpWnd.Region()->SetRgnRect(&rcRgn); m_uTimerID = SetTimer(1, 100, NULL); m_bLBtnDown = FALSE; } CView::OnLButtonUp(nFlags, point); } void CBarCodeView::OnTimer(UINT nIDEvent) { RGNXFORM XForm; static L_INT nCount=0; CDC *pDC; pDC = GetDC(); if (!pDC) return; XForm.uViewPerspective = TOP_LEFT; XForm.nXScalarNum = 1; XForm.nXScalarDen = 1; XForm.nYScalarNum = 1; XForm.nYScalarDen = 1; XForm.nXOffset = -GetScrollPos(SB_HORZ); XForm.nYOffset = -GetScrollPos(SB_VERT); if (nCount++>7) nCount=0; m_LeadBmpWnd.Paint()->SetDC(pDC->GetSafeHdc()); m_LeadBmpWnd.Paint()->FrameRgn(L_FRAME_MOVING0 + nCount, &XForm); ReleaseDC(pDC); CView::OnTimer(nIDEvent); } void CBarCodeView::OnFileSaveAs() { BeginWaitCursor(); L_BOOL bOldAutoProcess=FALSE; SAVEDLGPARAMS SaveParms; bOldAutoProcess = m_LeadBmpWnd.DialogFile()->IsAutoProcessEnabled(); m_LeadBmpWnd.DialogFile()->EnableAutoProcess(); memset(&SaveParms,0,sizeof(SaveParms)); SaveParms.uStructSize = sizeof(SAVEDLGPARAMS); SaveParms.pBitmap = m_LeadBmpWnd.GetHandle(); SaveParms.nBitsPerPixel = m_LeadBmpWnd.GetBitsPerPixel(); SaveParms.nFormat = FILE_BMP; SaveParms.nQFactor = 2; SaveParms.nStampBits = 24; SaveParms.nStampWidth = 120; SaveParms.nStampHeight = 120; SaveParms.uSaveMulti = MULTIPAGE_OPERATION_REPLACE ; SaveParms.uDlgFlags = DLG_SAVE_SHOW_FILEOPTIONS_PROGRESSIVE | DLG_SAVE_SHOW_FILEOPTIONS_MULTIPAGE | DLG_SAVE_SHOW_FILEOPTIONS_STAMP | DLG_SAVE_SHOW_FILEOPTIONS_QFACTOR | DLG_SAVE_SHOW_FILEOPTIONS_J2KOPTIONS | DLG_SAVE_SHOW_FILEOPTIONS_BASICJ2KOPTIONS ; m_LeadBmpWnd.DialogFile()->SetSaveParams(&SaveParms); L_INT nRet = m_LeadBmpWnd.DialogFile()->DoModalSave(GetSafeHwnd()); if ((nRet != SUCCESS_DLG_OK) && (nRet != SUCCESS_DLG_CANCEL)) LBase::DisplayErrorFromList(GetSafeHwnd()); m_LeadBmpWnd.DialogFile()->EnableAutoProcess(bOldAutoProcess); EndWaitCursor(); } void CBarCodeView::ConvertNULLString(L_CHAR L_FAR * pszSrcBuf, L_CHAR L_FAR * pszDestBuf, L_INT nBufCount) { int n = 0; while (n < nBufCount) { if(pszSrcBuf[n] == '\0') pszDestBuf[n] = ' '; else pszDestBuf[n] = pszSrcBuf[n]; n++; } //pszDestBuf[nBufCount - 1] = '\0'; } LRESULT CBarCodeView::OnHandlePalette(WPARAM wParam,LPARAM lParam) { if(lParam==TRUE) { m_LeadBmpWnd.HandlePalette(WM_PALETTECHANGED,wParam,0); m_LeadBmpWnd.Repaint(); } else { if(m_LeadBmpWnd.HandlePalette(WM_QUERYNEWPALETTE,0,0)==FALSE) m_LeadBmpWnd.Repaint(); } return TRUE; } void CBarCodeView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { if(bActivate==TRUE) { m_LeadBmpWnd.HandlePalette(WM_QUERYNEWPALETTE,0,0); ::SetFocus(m_LeadBmpWnd.GetBitmapWnd()); } CView::OnActivateView(bActivate, pActivateView, pDeactiveView); }