DXApp.cpp
上传用户:lijia5631
上传日期:2008-11-10
资源大小:1214k
文件大小:6k
源码类别:

视频捕捉/采集

开发平台:

MultiPlatform

  1. /**   * HandVu - a library for computer vision-based hand gesture   * recognition.   * Copyright (C) 2004 Mathias Kolsch, matz@cs.ucsb.edu   *   * This program is free software; you can redistribute it and/or   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version.   *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 59 Temple Place - Suite 330,    * Boston, MA  02111-1307, USA.   *   * $Id: DXApp.cpp,v 1.8 2004/11/24 08:38:40 matz Exp $ **/ #include "stdafx.h"
  2. #include "Common.h"
  3. #include "DXApp.h"
  4. #include "MainFrm.h"
  5. #include "DXAppDoc.h"
  6. #include "DXAppView.h"
  7. #include "DXCommandLineInfo.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. int g_verbose = 0; // declared in Common.h FILE* g_ostream = NULL; // declared in Common.h
  12. // CDXApp
  13. BEGIN_MESSAGE_MAP(CDXApp, CWinApp)
  14. ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  15. // Standard file based document commands
  16. ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
  17. ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  18. END_MESSAGE_MAP()
  19. // CDXApp construction
  20. CDXApp::CDXApp()
  21. {
  22. }
  23. // The one and only CDXApp object
  24. CDXApp theApp;
  25. // CDXApp initialization
  26. BOOL CDXApp::InitInstance()
  27. {
  28. // InitCommonControls() is required on Windows XP if an application
  29. // manifest specifies use of ComCtl32.dll version 6 or later to enable
  30. // visual styles.  Otherwise, any window creation will fail.
  31. InitCommonControls();
  32. CWinApp::InitInstance();
  33. // Initialize OLE libraries
  34. if (!AfxOleInit())
  35. {
  36. AfxMessageBox(IDP_OLE_INIT_FAILED);
  37. return FALSE;
  38. }
  39. AfxEnableControlContainer();
  40. // Standard initialization
  41. // Change the registry key under which our settings are stored
  42. SetRegistryKey(_T("Matz' Applications"));
  43.   // check for the presence of some libraries etc.
  44.   //CheckEnvironment();
  45.   // LoadStdProfileSettings(4);  // Load standard INI file options (including MRU)
  46.   // Register the application's document templates.  Document templates
  47. //  serve as the connection between documents, frame windows and views
  48. CSingleDocTemplate* pDocTemplate;
  49. pDocTemplate = new CSingleDocTemplate(
  50. IDR_MAINFRAME,
  51. RUNTIME_CLASS(CDXAppDoc),
  52. RUNTIME_CLASS(CMainFrame),       // main SDI frame window
  53. RUNTIME_CLASS(CDXAppView));
  54. AddDocTemplate(pDocTemplate);
  55. // Parse command line for standard shell commands, DDE, file open
  56. CDXCommandLineInfo cmdInfo;
  57. ParseCommandLine(cmdInfo);
  58. // Dispatch commands specified on the command line.  Will return FALSE if
  59. // app was launched with /RegServer, /Register, /Unregserver or /Unregister.
  60.   if (!ProcessShellCommand(cmdInfo)) {
  61. return FALSE;
  62.   }
  63.   // logging/debug output
  64.   string logfilename = cmdInfo.GetLogFilename();
  65.   if (logfilename!="") {
  66.     g_ostream = fopen(logfilename.c_str(), "a+");
  67.     g_verbose = cmdInfo.GetVerbosity();     ASSERT(g_ostream);
  68.     VERBOSE0(3, "Starting HandVu's DXApp");
  69.     VERBOSE1(3, "logging to (this) file: %s", logfilename.c_str());
  70.   }
  71.   if (cmdInfo.PrintVersion()) {
  72.     string version = "DXApp: $Id: DXApp.cpp,v 1.8 2004/11/24 08:38:40 matz Exp $";
  73.     VERBOSE1(3, "%s", version.c_str());
  74.     fprintf(stderr, "%sn", version.c_str());
  75.   }
  76.   // we should be done with all initialization that is required before the DX stuff
  77.   // can be initialized. do that.
  78.   POSITION pos = pDocTemplate->GetFirstDocPosition();
  79.   ASSERT(pos);
  80.   if (!pos) return FALSE;
  81.   CDXAppDoc* pDoc = (CDXAppDoc*) pDocTemplate->GetNextDoc(pos);
  82.   ASSERT(pDoc);
  83.   if (!pDoc) return FALSE;
  84.   
  85.   pDoc->SetHandVuLogfilename(logfilename);
  86.   if (!pDoc->StartDXManager(cmdInfo.PrintVersion())) {
  87.     return FALSE;
  88.   }
  89.   if (!pDoc->SetDefaults(cmdInfo.GetConductor())) {
  90.     return FALSE;
  91.   }
  92. // The one and only window has been initialized, so show and update it
  93. m_pMainWnd->ShowWindow(SW_SHOW);
  94. m_pMainWnd->UpdateWindow();
  95. // call DragAcceptFiles only if there's a suffix
  96. //  In an SDI app, this should occur after ProcessShellCommand
  97.   VERBOSE0(5, "Successfully started HandVu's DXApp");
  98.   return TRUE;
  99. }
  100. BOOL CDXApp::CheckEnvironment()
  101. {
  102.   char pathbuffer[_MAX_PATH];
  103.   char cv[] = "CV.dll";
  104.   char magick[] = "CORE_RL_Magick++_.lib";
  105.   char envvar[] = "PATH";
  106.   /* Search for file in PATH environment variable: */
  107.   _searchenv(cv, envvar, pathbuffer);
  108.   if (*pathbuffer=='') {
  109.     VERBOSE0(1, "CV.dll is not in the path, aborting");
  110.     return FALSE;
  111.   }
  112.   _searchenv(magick, envvar, pathbuffer);
  113.   if (*pathbuffer=='') {
  114.     VERBOSE0(1, "CORE_RL_Magick++_.lib is not in the path, aborting");
  115.     return FALSE;
  116.   }
  117.   return TRUE;
  118. }
  119. // CAboutDlg dialog used for App About
  120. class CAboutDlg : public CDialog
  121. {
  122. public:
  123. CAboutDlg();
  124. // Dialog Data
  125. enum { IDD = IDD_ABOUTBOX };
  126. protected:
  127. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  128. // Implementation
  129. protected:
  130. DECLARE_MESSAGE_MAP()
  131. };
  132. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  133. {
  134. }
  135. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  136. {
  137. CDialog::DoDataExchange(pDX);
  138. }
  139. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  140. END_MESSAGE_MAP()
  141. // App command to run the dialog
  142. void CDXApp::OnAppAbout()
  143. {
  144. CAboutDlg aboutDlg;
  145. aboutDlg.DoModal();
  146. }
  147. // CDXApp message handlers