home *** CD-ROM | disk | FTP | other *** search
- // This code and information is provided "as is" without warranty of
- // any kind, either expressed or implied, including but not limited to
- // the implied warranties of merchantability and/or fitness for a
- // particular purpose.
-
- // Copyright (C) 1996 Intel corporation. All rights reserved.
-
- // IPlay.cpp : Defines the class behaviors for the application.
- //
-
- #include "stdafx.h"
- #include "IPlay.h"
-
- #include "mainfrm.h"
- #include "IPlaydoc.h"
-
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
-
- /////////////////////////////////////////////////////////////////////////////
- // CIPlayApp
-
- BEGIN_MESSAGE_MAP(CIPlayApp, CWinApp)
- //{{AFX_MSG_MAP(CIPlayApp)
- ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- // DO NOT EDIT what you see in these blocks of generated code!
- //}}AFX_MSG_MAP
- // Standard file based document commands
- ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
- ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
- END_MESSAGE_MAP()
-
- /////////////////////////////////////////////////////////////////////////////
- // CIPlayApp construction
-
- CIPlayApp::CIPlayApp()
- {
- // TODO: add construction code here,
- // Place all significant initialization in InitInstance
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // The one and only CIPlayApp object
-
- CIPlayApp theApp;
-
- /////////////////////////////////////////////////////////////////////////////
- // CIPlayApp initialization
-
- BOOL CIPlayApp::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.
-
- Enable3dControls();
-
- LoadStdProfileSettings(); // Load standard INI file options (including MRU)
-
- // Initialize the quartz library
- CoInitialize(NULL);
-
- // Register the application's document templates. Document templates
- // serve as the connection between documents, frame windows and views.
-
- CSingleDocTemplate* pDocTemplate;
- pDocTemplate = new CSingleDocTemplate(
- IDR_MAINFRAME,
- RUNTIME_CLASS(CIPlayDoc),
- RUNTIME_CLASS(CMainFrame), // main SDI frame window
- RUNTIME_CLASS(CIndeo));
- AddDocTemplate(pDocTemplate);
-
- // Enable DDE Execute open
- EnableShellOpen();
- RegisterShellFileTypes();
-
- // simple command line parsing
- if (m_lpCmdLine[0] == '\0')
- {
- // create a new (empty) document
- OnFileNew();
- }
- else
- {
- // open an existing document
- OpenDocumentFile(m_lpCmdLine);
- }
-
- // Enable drag/drop open
- m_pMainWnd->DragAcceptFiles();
-
- 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
-
- // Implementation
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //{{AFX_MSG(CAboutDlg)
- // No message handlers
- //}}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)
- // No message handlers
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
-
- // App command to run the dialog
- void CIPlayApp::OnAppAbout()
- {
- CAboutDlg aboutDlg;
- aboutDlg.DoModal();
- }
-
- void CIPlayApp::OnDocumentCreated( CIPlayDoc *pIPlayDoc )
- {
- // Single documents only
- // If you want to convert to an MDI you will need to hold a list
- // of all created documents and change CPlayerApp::Run to build
- // up a list of event handles to wait for.
- ASSERT( m_pIPlayDoc == NULL );
- m_pIPlayDoc = pIPlayDoc;
-
- }
-
- void CIPlayApp::OnDocumentDestroyed( CIPlayDoc *pIPlayDoc )
- {
- // Single documents only
- ASSERT( m_pIPlayDoc == pIPlayDoc );
- m_pIPlayDoc = NULL;
-
- }
-
-
- int CIPlayApp::Run()
- { // Overridden to check for Graph events as well as messages
-
- if (m_pMainWnd == NULL && AfxOleGetUserCtrl())
- {
- // Not launched /Embedding or /Automation, but has no main window!
- TRACE0("Warning: m_pMainWnd is NULL in CPlayerApp::Run - quitting application.\n");
- AfxPostQuitMessage(0);
- }
-
- BOOL bIdle = TRUE;
- LONG lIdleCount = 0;
- HANDLE ahObjects[1]; // handles that need to be waited on
- const int cObjects = 1; // no of objects that we are waiting on
-
- // message loop lasts until we get a WM_QUIT message
- // upon which we shall return from the function
- while (TRUE) {
-
- // If we don't have an event handle then process idle
- // routines until a message arrives or until the idle routines
- // stop (when we block until a message arrives). The graph event
- // handle can only be created in response to a message
- if( (ahObjects[ 0 ] = m_pIPlayDoc->GetGraphEventHandle()) == NULL ){
- while ( bIdle
- && !::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE))
- {
- // call OnIdle while in bIdle state
- if (!OnIdle(lIdleCount++)){
- bIdle = FALSE;
- WaitMessage();
- }
- }
- } else {
- // wait for any message sent or posted to this queue
- // or for a graph notification. If there is no message or event
- // and we are idling then we process the idle time routines
- DWORD result;
-
- result = MsgWaitForMultipleObjects( cObjects
- , ahObjects
- , FALSE
- , (bIdle ? 0 : INFINITE)
- , QS_ALLINPUT
- );
- if( result != (WAIT_OBJECT_0 + cObjects) ){
- // not a message...
-
- if( result == WAIT_OBJECT_0 )
- m_pIPlayDoc->OnGraphNotify();
-
- else if( result == WAIT_TIMEOUT )
- if(!OnIdle(lIdleCount++))
- bIdle = FALSE;
-
- continue;
- }
- }
-
-
- // When here, we either have a message or no event handle
- // has been created yet.
-
- // read all of the messages in this next loop
- // removing each message as we read it
- do
- {
- // pump message, but quit on WM_QUIT
- if (!PumpMessage())
- return ExitInstance();
-
- // reset "no idle" state after pumping "normal" message
- if (IsIdleMessage(&m_msgCur))
- {
- bIdle = TRUE;
- lIdleCount = 0;
- }
-
- } while (::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE));
-
- } // end of the always while-loop
-
-
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // CIPlayApp commands
-
-