home *** CD-ROM | disk | FTP | other *** search
/ Mastering Visual Basic 6 / mastvb6.iso / leadtools / ocx32.lt / MFCDEMO.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1998-07-03  |  10.5 KB  |  380 lines

  1. // mfcdemo.cpp : Defines the class behaviors for the application.
  2. // Copyright (C) 1996 LEAD Technologies, Inc.
  3. // All rights reserved.
  4.  
  5. #include "stdafx.h"
  6.  
  7. #include "mfcdemo.h"
  8.  
  9. #include "mainfrm.h"
  10. #include "mfcdedoc.h"
  11. #include "mfcdevw.h"
  12.  
  13. #ifdef _DEBUG
  14. #undef THIS_FILE
  15. static char BASED_CODE THIS_FILE[] = __FILE__;
  16. #endif
  17.  
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CMfcdemoApp
  20.  
  21. BEGIN_MESSAGE_MAP(CMfcdemoApp, CWinApp)
  22.    //{{AFX_MSG_MAP(CMfcdemoApp)
  23.    ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  24.    ON_COMMAND(ID_FILE_CAPTURESCREEN, OnFileCapturescreen)
  25.    ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
  26.    ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
  27.    ON_COMMAND(ID_FILE_ACQUIRE, OnFileAcquire)
  28.    ON_COMMAND(ID_FILE_SELECTSOURCE, OnFileSelectsource)
  29.    ON_COMMAND(ID_PREFERENCES_DITHERING_ERRORDIFFUSION, OnPreferencesDitheringErrordiffusion)
  30.    ON_COMMAND(ID_PREFERENCES_DITHERING_ORDERED, OnPreferencesDitheringOrdered)
  31.    ON_COMMAND(ID_PREFERENCES_PALETTE_AUTO, OnPreferencesPaletteAuto)
  32.    ON_COMMAND(ID_PREFERENCES_PALETTE_FIXED, OnPreferencesPaletteFixed)
  33.    ON_COMMAND(ID_PREFERENCES_BITONALSCALING_FAVORBLACK, OnPreferencesBitonalscalingFavorblack)
  34.    ON_COMMAND(ID_PREFERENCES_BITONALSCALING_NORMAL, OnPreferencesBitonalscalingNormal)
  35.    ON_COMMAND(ID_PREFERENCES_BITONALSCALING_SCALETOGRAY, OnPreferencesBitonalscalingScaletogray)
  36.    ON_UPDATE_COMMAND_UI(ID_PREFERENCES_DITHERING_ERRORDIFFUSION, OnUpdatePreferencesDitheringErrordiffusion)
  37.    ON_UPDATE_COMMAND_UI(ID_PREFERENCES_DITHERING_ORDERED, OnUpdatePreferencesDitheringOrdered)
  38.    ON_UPDATE_COMMAND_UI(ID_PREFERENCES_PALETTE_AUTO, OnUpdatePreferencesPaletteAuto)
  39.    ON_UPDATE_COMMAND_UI(ID_PREFERENCES_PALETTE_FIXED, OnUpdatePreferencesPaletteFixed)
  40.    ON_UPDATE_COMMAND_UI(ID_PREFERENCES_BITONALSCALING_NORMAL, OnUpdatePreferencesBitonalscalingNormal)
  41.    ON_UPDATE_COMMAND_UI(ID_PREFERENCES_BITONALSCALING_SCALETOGRAY, OnUpdatePreferencesBitonalscalingScaletogray)
  42.    ON_UPDATE_COMMAND_UI(ID_PREFERENCES_BITONALSCALING_FAVORBLACK, OnUpdatePreferencesBitonalscalingFavorblack)
  43.    ON_COMMAND(ID_FILE_COLORMERGE, OnFileColormerge)
  44.    //}}AFX_MSG_MAP
  45.    // Standard file based document commands
  46.    ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  47.    // Standard print setup command
  48.    ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
  49. END_MESSAGE_MAP()
  50.  
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CMfcdemoApp construction
  53.  
  54. CMfcdemoApp::CMfcdemoApp()
  55. {
  56.    // TODO: add construction code here,
  57.    // Place all significant initialization in InitInstance
  58. }
  59.  
  60. /////////////////////////////////////////////////////////////////////////////
  61. // The one and only CMfcdemoApp object
  62.  
  63. CMfcdemoApp theApp;
  64.  
  65. /////////////////////////////////////////////////////////////////////////////
  66. // CMfcdemoApp initialization
  67.  
  68. BOOL CMfcdemoApp::InitInstance()
  69. {
  70.         m_nOpenMode = OPENMODE_FILE;
  71.         m_fOrderedDither = TRUE;
  72.         m_fAutoPalette = TRUE;
  73.         m_nBitonalScaling = CLead::BITONALSCALING_NORMAL;
  74.  
  75.    if (!AfxOleInit())
  76.    {
  77.       AfxMessageBox(IDP_OLE_INIT_FAILED);
  78.       return FALSE;
  79.    }
  80.  
  81.    // Standard initialization
  82.    // If you are not using these features and wish to reduce the size
  83.    //  of your final executable, you should remove from the following
  84.    //  the specific initialization routines you do not need.
  85.  
  86. #ifdef WIN32
  87.    Enable3dControls();
  88. #endif
  89.    LoadStdProfileSettings();  // Load standard INI file options (including MRU)
  90.  
  91.    // Register the application's document templates.  Document templates
  92.    //  serve as the connection between documents, frame windows and views.
  93.  
  94.    CMultiDocTemplate* pDocTemplate;
  95.    pDocTemplate = new CMultiDocTemplate(
  96.       IDR_MFCDEMTYPE,
  97.       RUNTIME_CLASS(CMfcdemoDoc),
  98.       RUNTIME_CLASS(CMDIChildWnd),          // standard MDI child frame
  99.       RUNTIME_CLASS(CMfcdemoView));
  100.    AddDocTemplate(pDocTemplate);
  101.  
  102.    // create main MDI Frame window
  103.    CMainFrame* pMainFrame = new CMainFrame;
  104.    if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  105.       return FALSE;
  106.    m_pMainWnd = pMainFrame;
  107.  
  108.  
  109.    if (m_lpCmdLine[0] != '\0')
  110.    {
  111.       // TODO: add command line processing here
  112.    }
  113.  
  114.    // The main window has been initialized, so show and update it.
  115.    pMainFrame->ShowWindow(m_nCmdShow);
  116.    pMainFrame->UpdateWindow();
  117.  
  118.    return TRUE;
  119. }
  120.  
  121. /////////////////////////////////////////////////////////////////////////////
  122. // CAboutDlg dialog used for App About
  123.  
  124. class CAboutDlg : public CDialog
  125. {
  126. public:
  127.    CAboutDlg();
  128.  
  129. // Dialog Data
  130.    //{{AFX_DATA(CAboutDlg)
  131.    enum { IDD = IDD_ABOUTBOX };
  132.    //}}AFX_DATA
  133.  
  134. // Implementation
  135. protected:
  136.    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  137.    //{{AFX_MSG(CAboutDlg)
  138.       // No message handlers
  139.    //}}AFX_MSG
  140.    DECLARE_MESSAGE_MAP()
  141. };
  142.  
  143. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  144. {
  145.    //{{AFX_DATA_INIT(CAboutDlg)
  146.    //}}AFX_DATA_INIT
  147. }
  148.  
  149. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  150. {
  151.    CDialog::DoDataExchange(pDX);
  152.    //{{AFX_DATA_MAP(CAboutDlg)
  153.    //}}AFX_DATA_MAP
  154. }
  155.  
  156. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  157.    //{{AFX_MSG_MAP(CAboutDlg)
  158.       // No message handlers
  159.    //}}AFX_MSG_MAP
  160. END_MESSAGE_MAP()
  161.  
  162. // App command to run the dialog
  163. void CMfcdemoApp::OnAppAbout()
  164. {
  165.    CAboutDlg aboutDlg;
  166.    aboutDlg.DoModal();
  167. }
  168.  
  169. /////////////////////////////////////////////////////////////////////////////
  170. // CMfcdemoApp commands
  171.  
  172. int CMfcdemoApp::DisplayLEADError(int nCode)
  173. {
  174.         CString str;
  175.  
  176.         if(nCode)
  177.         {
  178.                 str.Format("A LEADTOOLS error has occured.\nCODE = %d", nCode);
  179.                 m_pMainWnd->MessageBox(str);
  180.         }
  181.         return(nCode);
  182. }
  183.  
  184. void CMfcdemoApp::OpenDocument(int nMode)
  185. {
  186.         m_nOpenMode = nMode;
  187.         OnFileNew();
  188.         m_nOpenMode = OPENMODE_FILE;
  189. }
  190.  
  191. void CMfcdemoApp::OnFileCapturescreen() 
  192. {
  193.         OpenDocument(OPENMODE_CAPTURE);
  194. }
  195.  
  196. void CMfcdemoApp::OnEditPaste() 
  197. {
  198.         OpenDocument(OPENMODE_PASTE);
  199. }
  200.  
  201.  
  202. void CMfcdemoApp::OnUpdateEditPaste(CCmdUI* pCmdUI) 
  203. {
  204.         CLead* pLead = GetMainLead();
  205.         if(pLead)
  206.                 pCmdUI->Enable(pLead->Paste(CLead::PASTE_ISREADY));
  207. }
  208.  
  209. void CMfcdemoApp::OnFileAcquire() 
  210. {
  211.         OpenDocument(OPENMODE_TWAIN);
  212. }
  213.  
  214. void CMfcdemoApp::OnFileSelectsource() 
  215. {
  216.         GetMainLead()->TwainSelect((OLE_HANDLE) m_pMainWnd->m_hWnd);
  217. }
  218.  
  219. CPtrArray *CMfcdemoApp::EnumAllDocuments(CDocument *pDocToExclude /*=NULL*/)
  220. {
  221.    CPtrArray* pArray;
  222. #if IS_MFC40
  223.     POSITION pos = theApp.GetFirstDocTemplatePosition();
  224. #else
  225.    POSITION pos = m_templateList.GetHeadPosition();
  226. #endif
  227.  
  228.     pArray = new CPtrArray;        
  229.    while (pos != NULL)
  230.    {
  231. #if IS_MFC40
  232.       CDocTemplate* pTemplate = theApp.GetNextDocTemplate(pos);
  233. #else
  234.       CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);
  235. #endif
  236.         POSITION posDoc = pTemplate->GetFirstDocPosition();
  237.         while(posDoc != NULL)
  238.         {
  239.             CDocument* pDoc = pTemplate->GetNextDoc(posDoc);
  240.            if( pDoc != pDocToExclude )
  241.                 pArray->Add(pDoc);
  242.         }
  243.    }
  244.     return(pArray);
  245. }
  246.  
  247. void CMfcdemoApp::UpdateAllDocumentViews()
  248. {
  249. #if IS_MFC40
  250.     POSITION pos = theApp.GetFirstDocTemplatePosition();
  251. #else
  252.    POSITION pos = m_templateList.GetHeadPosition();
  253. #endif
  254.  
  255.    while (pos != NULL)
  256.    {
  257. #if IS_MFC40
  258.       CDocTemplate* pTemplate = theApp.GetNextDocTemplate(pos);
  259. #else
  260.       CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);
  261. #endif
  262.        POSITION posDoc = pTemplate->GetFirstDocPosition();
  263.         while(posDoc != NULL)
  264.         {
  265.                 CDocument* pDoc = pTemplate->GetNextDoc(posDoc);
  266.                 pDoc->UpdateAllViews(NULL, (LPARAM) 0); 
  267.         }
  268.    }
  269. }
  270.  
  271. void CMfcdemoApp::OnPreferencesDitheringErrordiffusion() 
  272. {
  273.         m_fOrderedDither = FALSE;
  274.         UpdateAllDocumentViews();
  275. }
  276.  
  277. void CMfcdemoApp::OnPreferencesDitheringOrdered() 
  278. {
  279.         m_fOrderedDither = TRUE;
  280.         UpdateAllDocumentViews();
  281. }
  282.  
  283. CLead* CMfcdemoApp::GetMainLead()
  284. {
  285.         CMainFrame* pFrame;
  286.         pFrame = (CMainFrame*)m_pMainWnd;
  287.         if(!pFrame)
  288.                 return(NULL);
  289.         return(pFrame->m_pLead);
  290. }
  291.  
  292. void CMfcdemoApp::OnPreferencesPaletteAuto() 
  293. {
  294.         m_fAutoPalette = TRUE;
  295.         UpdateAllDocumentViews();
  296.    
  297. }
  298.  
  299. void CMfcdemoApp::OnPreferencesPaletteFixed() 
  300. {
  301.         m_fAutoPalette = FALSE;
  302.         UpdateAllDocumentViews();
  303. }
  304.  
  305.  
  306. void CMfcdemoApp::OnPreferencesBitonalscalingFavorblack() 
  307. {
  308.         m_nBitonalScaling = CLead::BITONALSCALING_FAVORBLACK;
  309.         UpdateAllDocumentViews();
  310.    
  311. }
  312.  
  313. void CMfcdemoApp::OnPreferencesBitonalscalingNormal() 
  314. {
  315.         m_nBitonalScaling = CLead::BITONALSCALING_NORMAL;
  316.         UpdateAllDocumentViews();
  317.    
  318. }
  319.  
  320. void CMfcdemoApp::OnPreferencesBitonalscalingScaletogray() 
  321. {
  322.         m_nBitonalScaling = CLead::BITONALSCALING_SCALETOGRAY;
  323.         UpdateAllDocumentViews();
  324. }
  325.  
  326. void CMfcdemoApp::OnUpdatePreferencesDitheringErrordiffusion(CCmdUI* pCmdUI) 
  327. {
  328.         pCmdUI->SetCheck(m_fOrderedDither ? 0 : 1); 
  329.    
  330. }
  331.  
  332. void CMfcdemoApp::OnUpdatePreferencesDitheringOrdered(CCmdUI* pCmdUI) 
  333. {
  334.         pCmdUI->SetCheck(m_fOrderedDither ? 1 : 0); 
  335.    
  336. }
  337.  
  338. void CMfcdemoApp::OnUpdatePreferencesPaletteAuto(CCmdUI* pCmdUI) 
  339. {
  340.         pCmdUI->SetCheck(m_fAutoPalette ? 1 : 0); 
  341.    
  342. }
  343.  
  344. void CMfcdemoApp::OnUpdatePreferencesPaletteFixed(CCmdUI* pCmdUI) 
  345. {
  346.         pCmdUI->SetCheck(m_fAutoPalette ? 0 : 1); 
  347.    
  348. }
  349.  
  350. void CMfcdemoApp::OnUpdatePreferencesBitonalscalingFavorblack(CCmdUI* pCmdUI) 
  351. {
  352.         CLead* pLead = GetMainLead();
  353.         if(pLead)
  354.                 pCmdUI->Enable(pLead->GetVersionLevel() == CLead::VERSIONLEVEL_EXP||pLead->GetVersionLevel() == CLead::VERSIONLEVEL_MEDICAL);
  355.         pCmdUI->SetCheck(m_nBitonalScaling == CLead::BITONALSCALING_FAVORBLACK);
  356.    
  357. }
  358.  
  359. void CMfcdemoApp::OnUpdatePreferencesBitonalscalingNormal(CCmdUI* pCmdUI) 
  360. {
  361.         pCmdUI->SetCheck(m_nBitonalScaling == CLead::BITONALSCALING_NORMAL);
  362.    
  363. }
  364.  
  365. void CMfcdemoApp::OnUpdatePreferencesBitonalscalingScaletogray(CCmdUI* pCmdUI) 
  366. {
  367.         CLead* pLead = GetMainLead();
  368.         if(pLead)
  369.                 pCmdUI->Enable(pLead->GetVersionLevel() == CLead::VERSIONLEVEL_EXP||pLead->GetVersionLevel() == CLead::VERSIONLEVEL_MEDICAL);
  370.         pCmdUI->SetCheck(m_nBitonalScaling == CLead::BITONALSCALING_SCALETOGRAY);
  371.    
  372. }
  373.  
  374.  
  375. void CMfcdemoApp::OnFileColormerge() 
  376. {
  377.         OpenDocument(OPENMODE_COLORMERGE);
  378. }
  379.  
  380.