/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 14 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c)1991-2004 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "stdafx.h" #include "ABC.h" #include "MainFrm.h" #include "ABCView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include "ABCDoc.h" extern CABCApp theApp; ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_MESSAGE(WM_SETMESSAGESTRING, OnSetMessageString) ON_WM_CREATE() ON_WM_KEYDOWN() ON_WM_CLOSE() ON_UPDATE_COMMAND_UI(ID_BORDER, OnUpdateBorder) ON_UPDATE_COMMAND_UI(ID_LOSSLESS, OnUpdateLossless) ON_COMMAND(ID_BORDER, OnBorder) ON_COMMAND(ID_LOSSLESS, OnLossless) ON_COMMAND(ID_COMBINE, OnCombine) ON_UPDATE_COMMAND_UI(ID_COMBINE, OnUpdateCombine) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSaveAs) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS_TIFF, OnUpdateFileSaveAsTiff) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_MULTI_PAGE, OnUpdateFileSaveMultiPage) ON_COMMAND(ID_VIRTUALLOSSLESS, OnVirtuallossless) ON_UPDATE_COMMAND_UI(ID_VIRTUALLOSSLESS, OnUpdateVirtuallossless) ON_UPDATE_COMMAND_UI(ID_ENHANCED, OnUpdateEnhanced) ON_COMMAND(ID_ENHANCED, OnEnhanced) ON_UPDATE_COMMAND_UI(ID_MODIFIED_1, OnUpdateModified1) ON_COMMAND(ID_MODIFIED_1, OnModified1) ON_UPDATE_COMMAND_UI(ID_FAST_MODIFIED_1, OnUpdateFastModified1) ON_COMMAND(ID_FAST_MODIFIED_1, OnFastModified1) ON_UPDATE_COMMAND_UI(ID_MODIFIED_2, OnUpdateModified2) ON_COMMAND(ID_MODIFIED_2, OnModified2) ON_UPDATE_COMMAND_UI(ID_FAST_MODIFIED_2, OnUpdateFastModified2) ON_COMMAND(ID_FAST_MODIFIED_2, OnFastModified2) ON_UPDATE_COMMAND_UI(ID_MODIFIED_3, OnUpdateModified3) ON_COMMAND(ID_MODIFIED_3, OnModified3) ON_UPDATE_COMMAND_UI(ID_FAST_MODIFIED_3, OnUpdateFastModified3) ON_COMMAND(ID_FAST_MODIFIED_3, OnFastModified3) ON_COMMAND(ID_QUALITY_FASTLOSSLESS, OnLossLessFast) ON_UPDATE_COMMAND_UI(ID_QUALITY_FASTLOSSLESS, OnUpdateLossLessFast) ON_COMMAND(ID_QUALITY_FASTLOSSY, OnLossyFast) ON_WM_ACTIVATE() ON_UPDATE_COMMAND_UI(ID_QUALITY_FASTLOSSY, OnUpdateLossyFast) //}}AFX_MSG_MAP END_MESSAGE_MAP() /*--------------------------------------------------------------------------+ | Function :CMainFrame | Desc :Constructor | Return : | Notes : +--------------------------------------------------------------------------*/ CMainFrame::CMainFrame() { LBase::LoadLibraries(LT_ALL_LEADLIB); LDialogBase::Initialize(DLG_INIT_COLOR); WRPUNLOCKSUPPORT(); } /*--------------------------------------------------------------------------+ | Function :~CMainFrame | Desc :Destructor | Return : | Notes : +--------------------------------------------------------------------------*/ CMainFrame::~CMainFrame() { LDialogBase::Free(); LBase::UnloadLibraries(LT_ALL_LEADLIB); } /*--------------------------------------------------------------------------+ | Function :OnCreate | Desc :On create | Return :int | Notes : +--------------------------------------------------------------------------*/ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)) ) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } UINT nID; UINT nStyles; int cxWidth; m_wndStatusBar.GetPaneInfo(0, nID, nStyles, cxWidth); m_wndStatusBar.SetPaneInfo(0, nID, nStyles, cxWidth *(1/2)); m_wndStatusBar.GetPaneInfo(1, nID, nStyles, cxWidth); m_wndStatusBar.SetPaneInfo(1, nID, nStyles, 100); m_wndStatusBar.GetPaneInfo(2, nID, nStyles, cxWidth); m_wndStatusBar.SetPaneInfo(2, nID, nStyles, 200); m_wndStatusBar.GetPaneInfo(3, nID, nStyles, cxWidth); m_wndStatusBar.SetPaneInfo(3, nID, nStyles, 75); m_wndStatusBar.GetPaneInfo(4, nID, nStyles, cxWidth); m_wndStatusBar.SetPaneInfo(4, nID, nStyles, 35); m_wndStatusBar.GetPaneInfo(5, nID, nStyles, cxWidth); m_wndStatusBar.SetPaneInfo(5, nID, nStyles, 90); m_wndStatusBar.GetPaneInfo(6, nID, nStyles, cxWidth); m_wndStatusBar.SetPaneInfo(6, nID, nStyles, 90); m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0; } /*--------------------------------------------------------------------------+ | Function :OnSetMessageString | Desc :On Set Message String | Return :LRESULT | Notes : +--------------------------------------------------------------------------*/ LRESULT CMainFrame::OnSetMessageString(WPARAM wParam, LPARAM lParam) { UINT nIDLast = m_nIDLastMessage; m_nFlags &= ~WF_NOPOPMSG; CWnd* pMessageBar = GetMessageBar(); CStatusBar* pStatusBar = (CStatusBar*)pMessageBar; if(pStatusBar) { LPCTSTR lpsz = NULL; CString strMessage; // set the message bar text if(lParam != 0) { ASSERT(wParam == 0); // can't have both an ID and a string lpsz = (LPCTSTR)lParam; // set an explicit string } else if (wParam != 0) { // get message associated with the ID indicated by wParam GetMessageString(wParam, strMessage); lpsz = strMessage; } pStatusBar->SetWindowText(lpsz); } m_nIDLastMessage = (UINT)wParam; // new ID (or 0) m_nIDTracking = (UINT)wParam; // so F1 on toolbar buttons work return nIDLast; } /*--------------------------------------------------------------------------+ | Function :OnKeyDown | Desc :On Key Down | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { switch(nChar) { case VK_ESCAPE: theApp.m_bKillProgress = TRUE; break; } CMDIFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags); } /*--------------------------------------------------------------------------+ | Function :OnClose | Desc :On Close | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnClose() { CMDIFrameWnd::OnClose(); } /*--------------------------------------------------------------------------+ | Function :RedrawChildrenCB | Desc :Redraw Children Call Back | Return :bool | Notes : +--------------------------------------------------------------------------*/ BOOL CALLBACK RedrawChildrenCB(HWND hWnd, LPARAM lParam) { RedrawWindow(hWnd,0,0,RDW_INVALIDATE|RDW_ALLCHILDREN|(LOWORD(lParam) ? RDW_ERASE:0)); return(TRUE); } /*--------------------------------------------------------------------------+ | Function :RedrawChildren | Desc :Redraw Children | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::RedrawChildren(BOOL bErase) { EnumChildWindows(this->m_hWnd, (WNDENUMPROC)RedrawChildrenCB, bErase); ((CABCView*)GetActiveView())->SetDisplayModeForAllViews( DISPLAYMODE_SCALETOGRAY | DISPLAYMODE_FAVORBLACK, theApp.m_nDisplayMode ) ; } /*--------------------------------------------------------------------------+ | Function :OnUpdateFileSaveAs | Desc :On Update File Save As | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateFileSaveAs(CCmdUI* pCmdUI) { pCmdUI->Enable( (theApp.m_Quality > -1) ); } /*--------------------------------------------------------------------------+ | Function :OnUpdateFileSaveAsTiff | Desc :On Update File Save As Tiff | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateFileSaveAsTiff(CCmdUI* pCmdUI) { pCmdUI->Enable( (theApp.m_Quality > -1) ); } /*--------------------------------------------------------------------------+ | Function :OnUpdateFileSaveMultiPage | Desc : | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateFileSaveMultiPage(CCmdUI* pCmdUI) { pCmdUI->Enable( (theApp.m_Quality > -1) ); } /*--------------------------------------------------------------------------+ | Function :OnCombine | Desc :set multi page save to combine two pages | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnCombine() { theApp.m_bCombine = !theApp.m_bCombine; } /*--------------------------------------------------------------------------+ | Function :OnLossless | Desc :set the ABC quality factor to lossless | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnLossless() { theApp.m_Quality = ABCQ_LOSSLESS; lstrcpy( theApp.m_szQuality, TEXT("Lossless") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnBorder | Desc :set the ABC quaity factor to remove border | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnBorder() { theApp.m_Quality = ABCQ_REMOVEBORDER; lstrcpy( theApp.m_szQuality, TEXT("RemoveBorder") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :PreviewCompress | Desc :do the process to show the preview of the compression result | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::PreviewCompress( void ) { theApp.ClosePreviewDocument(); L_TCHAR szOutFile[20] = PREVIEW_TEMP_FILE_NAME; L_TCHAR szOutFileG4[20] = PREVIEW_TEMP_FILE_NAME_G4; int nRet = SUCCESS; LBitmap Bitmap; CABCDoc *pCompressDoc = NULL; LOADFILEOPTION lfo; memset(&lfo, 0, sizeof(LOADFILEOPTION)); SET_SIZE(&lfo); LBaseFile::GetDefaultLoadFileOption( &lfo, sizeof(LOADFILEOPTION) ); lfo.PageNumber = theApp.m_nPageNumber; HCURSOR hCursor = SetCursor (LoadCursor (NULL, IDC_WAIT)); nRet = Bitmap.Load( theApp.m_szOpenedFileName, 0, ORDER_BGR, &lfo, NULL ); LFile DiskFile; DiskFile.SetBitmap(&Bitmap); DiskFile.SetFileName(szOutFile); nRet = DiskFile.SaveFile( FILE_ABC, 1, theApp.m_Quality, SAVEFILE_FIXEDPALETTE, NULL ); theApp.DisplayLEADError( nRet ); DiskFile.SetBitmap(&Bitmap); DiskFile.SetFileName(szOutFileG4); nRet = DiskFile.SaveFile( FILE_CCITT_GROUP4, 1, theApp.m_Quality, 0, NULL ); // this to do comparison with tif theApp.DisplayLEADError( nRet ); Bitmap.Free(); SetCursor (hCursor); pCompressDoc = (CABCDoc*)theApp.m_pDocManager->OpenDocumentFile( (LPCTSTR)szOutFile ); if( pCompressDoc ) { CString csTitle; csTitle.Format( TEXT("%s ( %s ) "), PREVIEWSTRING, theApp.m_szQuality ); pCompressDoc->SetTitle( csTitle ); pCompressDoc->m_bCompressed = TRUE; } /// this is to chose vertical or horizontal tiling RECT rectClient; GetClientRect( &rectClient ); int cleintWidth = rectClient.right; int clientHeight = rectClient.bottom; int imageWidth = Bitmap.GetWidth(); int imageHeight = Bitmap.GetHeight(); float cxV = (imageWidth + imageWidth) / (float)cleintWidth; float cyV = imageHeight / (float)clientHeight; float cxH = imageWidth / (float)cleintWidth; float cyH = (imageHeight + imageHeight) / (float)clientHeight; float cx = min( cxH, cxV ); float cy = min( cyH, cyV ); if( cx >= cy ) MDITile( MDITILE_HORIZONTAL ); else MDITile( MDITILE_VERTICAL ); // end of chose vertical or horizontal tiling theApp.FitImagesToWindows(); // this part of the code compare the size of one compressed file HANDLE hF1; DWORD dwSizeF1, dwSizeF2 ; hF1 = CreateFile( (LPCTSTR)szOutFileG4, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL ); if( INVALID_HANDLE_VALUE == hF1 ) AfxMessageBox( (LPCTSTR)szOutFile, MB_OK ); dwSizeF1 = GetFileSize( hF1, NULL ); if( dwSizeF1 == INVALID_FILE_SIZE ) AfxMessageBox( (LPCTSTR)szOutFile, MB_OK ); CloseHandle( hF1 ); hF1 = CreateFile( szOutFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL ); if( INVALID_HANDLE_VALUE == hF1 ) AfxMessageBox( szOutFile, MB_OK ); dwSizeF2 = GetFileSize( hF1, NULL ); if( dwSizeF2 == INVALID_FILE_SIZE ) AfxMessageBox( szOutFile, MB_OK ); CloseHandle( hF1 ); L_TCHAR sizeMessage[255]; float fR = ((float)dwSizeF1 / (float)dwSizeF2) * 100.0F; _stprintf( sizeMessage, TEXT("CCITT G4: %3d,%03d bytes \nLEAD ABC: %3d,%03d bytes \n %6.3f %% Improvement "), dwSizeF1/1000, dwSizeF1%1000, dwSizeF2/1000, dwSizeF2%1000, fR ); ((CABCView*)GetActiveView())->SetDisplayModeForAllViews( DISPLAYMODE_SCALETOGRAY | DISPLAYMODE_FAVORBLACK, theApp.m_nDisplayMode ) ; AfxMessageBox( sizeMessage, MB_OK ); } /*--------------------------------------------------------------------------+ | Function :OnVirtuallossless | Desc :set the ABC quality factor to Virtuallossless | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnVirtuallossless() { theApp.m_Quality = ABCQ_VIRTUALLOSSLESS; lstrcpy( theApp.m_szQuality, TEXT("VirtualLossless") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateVirtuallossless | Desc :Check/uncheck Virtuallossless control | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateVirtuallossless(CCmdUI* pCmdUI) { pCmdUI->Enable( TRUE ); pCmdUI->SetCheck(theApp.m_Quality == ABCQ_VIRTUALLOSSLESS ); } /*--------------------------------------------------------------------------+ | Function :OnUpdateEnhanced | Desc :Check/uncheck Enhanced control | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateEnhanced(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_ENHANCE ); } /*--------------------------------------------------------------------------+ | Function :OnEnhanced | Desc :set the ABC quality factor to Enhanced | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnEnhanced() { theApp.m_Quality = ABCQ_ENHANCE; lstrcpy( theApp.m_szQuality, TEXT("Enhanced") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateModified1 | Desc :Check/uncheck Modified1 control | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateModified1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_MODIFIED1 ); } /*--------------------------------------------------------------------------+ | Function :OnModified1 | Desc :set the ABC quality factor to Modified_1 | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnModified1() { theApp.m_Quality = ABCQ_MODIFIED1; lstrcpy( theApp.m_szQuality, TEXT("Modified_1") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateFastModified1 | Desc :Check/uncheck Modified1 control | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateFastModified1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_MODIFIED1_FAST ); } /*--------------------------------------------------------------------------+ | Function :OnFastModified1 | Desc :set the ABC quality factor to Modified_1 | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnFastModified1() { theApp.m_Quality = ABCQ_MODIFIED1_FAST; lstrcpy( theApp.m_szQuality, TEXT("FastModified_1") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateModified2 | Desc :Check/uncheck Modified2 control | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateModified2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_MODIFIED2 ); } /*--------------------------------------------------------------------------+ | Function :OnModified2 | Desc :set the ABC quality factor to Modified2 | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnModified2() { theApp.m_Quality = ABCQ_MODIFIED2; lstrcpy( theApp.m_szQuality, TEXT("Modified_2") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateFastModified2 | Desc :Check/uncheck Modified2 control | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateFastModified2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_MODIFIED2_FAST ); } /*--------------------------------------------------------------------------+ | Function :OnFastModified2 | Desc :set the ABC quality factor to Modified2 | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnFastModified2() { theApp.m_Quality = ABCQ_MODIFIED2_FAST; lstrcpy( theApp.m_szQuality, TEXT("FastModified_2") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateModified3 | Desc :Check/uncheck Modified2 control | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateModified3(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_MODIFIED3 ); } /*--------------------------------------------------------------------------+ | Function :OnModified3 | Desc :set the ABC quality factor to Modified2 | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnModified3() { theApp.m_Quality = ABCQ_MODIFIED3; lstrcpy( theApp.m_szQuality, TEXT("Modified_3") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateFastModified3 | Desc :Check/uncheck Modified2 control | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateFastModified3(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_MODIFIED3_FAST ); } /*--------------------------------------------------------------------------+ | Function :OnFastModified3 | Desc :set the ABC quality factor to Modified2 | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnFastModified3() { theApp.m_Quality = ABCQ_MODIFIED3_FAST; lstrcpy( theApp.m_szQuality, TEXT("FastModified_3") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateCombine | Desc :On Update Combine | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateCombine(CCmdUI* pCmdUI) { pCmdUI->SetCheck( theApp.m_bCombine == TRUE ); } /*--------------------------------------------------------------------------+ | Function :OnUpdateLossless | Desc :On Update Lossless | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateLossless(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_LOSSLESS ); } /*--------------------------------------------------------------------------+ | Function :OnUpdateBorder | Desc :On Update Border | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateBorder(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_REMOVEBORDER ); } /*--------------------------------------------------------------------------+ | Function :OnLossLessFast | Desc :set the ABC quality factor to remove border | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnLossLessFast() { theApp.m_Quality = ABCQ_LOSSLESS_FAST; lstrcpy( theApp.m_szQuality, TEXT("Fast LossLess") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateLossLessFast | Desc :On Update Border | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateLossLessFast(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_LOSSLESS_FAST ); } /*--------------------------------------------------------------------------+ | Function :OnLossyFast | Desc :set the ABC quality factor to remove border | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnLossyFast() { theApp.m_Quality = ABCQ_LOSSY_FAST; lstrcpy( theApp.m_szQuality, TEXT("Fast Lossy") ); PreviewCompress(); m_wndStatusBar.SetPaneText(1, theApp.m_szQuality, TRUE); RedrawChildren(FALSE); } /*--------------------------------------------------------------------------+ | Function :OnUpdateLossyFast | Desc :On Update Border | Return :void | Notes : +--------------------------------------------------------------------------*/ void CMainFrame::OnUpdateLossyFast(CCmdUI* pCmdUI) { pCmdUI->SetCheck(theApp.m_Quality == ABCQ_LOSSY_FAST ); }