Esempio n. 1
0
/*
	fileOpenMovie --
		uses MCI_OPEN to open the AVI file. Saves the device ID so we
			can do stuff like find the frame size.
		uses MCI_WINDOW to show the playback window
		uses MCI_DGV_STATUS_HWND to get a handle to the window
		gets the movie length with GetMovieLength, and
		positions the movie with positionMovie.
		Uses InvalidateRect to get window repainted (which will show
		the first frame)
		
		Gives user an annoying messagebox if this doesn't work.
		
*/
void fileOpenMovie(PMOVIEINFO pMovieInfo, LPSTR szFilename)
{
   
    if (pMovieInfo == NULL)
        {
        OutputDebugString("No MOVIEINFO for specified movie when trying to open AVI file.");
        return;
        }

   if (lstrlen(szFilename)){
     MCI_DGV_OPEN_PARMS mciOpen;
     MCI_DGV_WINDOW_PARMS   mciWindow;
     MCI_DGV_STATUS_PARMS   mciStatus;

     /* we got a filename, now close any old movie and open */
     /* the new one.                    */
     if (pMovieInfo->fMovieOpen)
         fileCloseMovie(pMovieInfo, TRUE);
     
     /* we have a .AVI movie to open, use MCI */
     /* set up the open parameters */
     mciOpen.dwCallback = NULL;
     mciOpen.wDeviceID = mciOpen.wReserved0 =
         mciOpen.wReserved1 = 0;
     mciOpen.lpstrDeviceType = NULL;
     mciOpen.lpstrElementName = szFilename;
     mciOpen.lpstrAlias = NULL;
     mciOpen.dwStyle = NULL; // WS_CHILD;
     mciOpen.hWndParent = NULL; //pMovieInfo->hwndParent;

     /* try to open the file */
     if (mciSendCommand(0, MCI_OPEN, 
         (DWORD)(MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT|MCI_DGV_OPEN_WS), 
       (DWORD)(LPMCI_DGV_OPEN_PARMS)&mciOpen) == 0){

         /* we opened the file o.k., now set up to */
         /* play it.                   */
         pMovieInfo->wMCIDeviceID = mciOpen.wDeviceID;  /* save ID */
         pMovieInfo->fMovieOpen = TRUE; /* a movie was opened */

         /* show the playback window */
         mciWindow.dwCallback = NULL;
         mciWindow.hWnd = pMovieInfo->hwndParent;// NULL;
         mciWindow.wReserved1 = mciWindow.wReserved2 = 0;
         mciWindow.nCmdShow = SW_SHOW;
         mciWindow.lpstrText = (LPSTR)NULL;
         mciSendCommand(pMovieInfo->wMCIDeviceID, MCI_WINDOW, 
             MCI_DGV_WINDOW_STATE | MCI_DGV_WINDOW_HWND, 
             (DWORD)(LPMCI_DGV_WINDOW_PARMS)&mciWindow);

         /* get the window handle */
         mciStatus.dwItem = MCI_DGV_STATUS_HWND;
         mciSendCommand(pMovieInfo->wMCIDeviceID, 
             MCI_STATUS, MCI_STATUS_ITEM,
             (DWORD)(LPMCI_STATUS_PARMS)&mciStatus);
         pMovieInfo->hwndMovie = pMovieInfo->hwndParent; //(HWND)mciStatus.dwReturn;
        
         /* get movie length */         
         pMovieInfo->dwMovieLength = GetMovieLength(pMovieInfo);         
         pMovieInfo->dwCurrentFrame = 0;
                  
         /* now get the movie centered */
         positionMovie(pMovieInfo);
     } else {
        /* generic error for open */
        MessageBox(pMovieInfo->hwndParent, "Unable to open Movie", NULL, 
                  MB_ICONEXCLAMATION|MB_OK);
        pMovieInfo->fMovieOpen = FALSE;
     }
   }
   
   /* cause an update to occur */
   InvalidateRect(pMovieInfo->hwndParent, NULL, FALSE);
   UpdateWindow(pMovieInfo->hwndParent);
   pMovieInfo->lLastSeek = 0;
}
Esempio n. 2
0
/*
	Terminate -- pauses movie, then closes it with fileCloseMovie
*/ 
void Terminate(PMOVIEINFO pMovieInfo)
{
	playMovie(pMovieInfo, 0);
	fileCloseMovie(pMovieInfo, FALSE);
}
Esempio n. 3
0
/*
	FileOpen -- uses GetOpenFileName to prompt user for AVI and HOT
		filenames.  Uses fileOpenMovie to load the AVI file, and
		playMovie and setMovie and MCI_WHERE to get it into the window
		and on the first frame.  Uses InitHotspots() to load
		hotspot file.
*/
BOOL FileOpen(HWND hWnd)
{    
    static OPENFILENAME ofn;
    char szBuf[129];
    char szFileName[MAXFILENAME] = "";
    char szFileTitle[MAXFILENAME] = "";
    char szFilterSpec [128] =                       /* file type filters */
             "AVI Files (*.AVI)\0*.AVI\0All Files (*.*)\0*.*\0";
    char szFilterSpec2 [128] = 
            "Hotspot Files (*.HOT)\0*.HOT\0All Files (*.*)\0*.*\0";

    ofn.lStructSize       = sizeof(OPENFILENAME);
    ofn.hwndOwner         = hWnd;
    ofn.lpstrFilter       = szFilterSpec;
    ofn.lpstrCustomFilter = NULL;
    ofn.nMaxCustFilter    = 0;
    ofn.nFilterIndex      = 1;
    ofn.lpstrFile         = szFileName;
    ofn.nMaxFile          = MAXFILENAME;
    ofn.lpstrInitialDir   = NULL;
    ofn.lpstrFileTitle    = szFileTitle;
    ofn.nMaxFileTitle     = MAXFILENAME;
    ofn.lpstrTitle        = "Open AVI File";
    ofn.lpstrDefExt       = "AVI";
    ofn.Flags             = 0;
    
    if (!GetOpenFileName ((LPOPENFILENAME)&ofn))
            return FALSE;    
    
    if (pMovieInfo)                                     // get rid of old stuff if there is
        {
        fileCloseMovie(pMovieInfo, TRUE);
        DeleteHotspotList(pMovieInfo);
        FREE(pMovieInfo);
        }
            
    lstrcpy(szWindowTitle, szBaseWindowTitle);
                    lstrcat(szWindowTitle, " - ");
                    lstrcat(szWindowTitle, szFileTitle);
    
    SetWindowText(hWnd, szWindowTitle);                
    
    {	// added SetProp to accomodate new drawproc
    	HANDLE hglb;
    	
    	hglb = GlobalAlloc(GHND,(DWORD)(sizeof(MOVIEINFO)));
    	if (hglb)
    	{
    		pMovieInfo = (PMOVIEINFO) GlobalLock(hglb);
    	}
    	else
    	{
    		pMovieInfo = NULL;
    	}
    	//pMovieInfo = (PMOVIEINFO) ((hglb = GlobalAlloc(GHND, (DWORD)(sizeof(MOVIEINFO)))) ? GlobalLock(hglb) : NULL);

	    if (!pMovieInfo)
	        return (FALSE);

	    pMovieInfo->hwndParent = hWnd;
	    lstrcpy(pMovieInfo->szAVIFileName, ofn.lpstrFile);

	    fileOpenMovie(pMovieInfo, ofn.lpstrFile);    
   	    SetProp(hWnd, (LPSTR) szMovieInfo,hglb);    
	    SetProp(pMovieInfo->hwndMovie, (LPSTR) szMovieInfo, hglb);
{ char a[256];wsprintf(a,"wnd1 %X wnd2 %X\n",hWnd,pMovieInfo->hwndMovie); OutputDebugString(a);}
    }
    //playMovie(pMovieInfo, 0);		// screws up drawproc for some reason
	{
		MCI_DGV_SETVIDEO_PARMS	dgv;
		UINT					uDevice;
		dgv.dwValue = (DWORD) ICAVIDrawProc;
			//MakeProcInstance((FARPROC) ICAVIDrawProc,hInstApp);
		dgv.dwItem = MCI_AVI_SETVIDEO_DRAW_PROCEDURE;
		uDevice = pMovieInfo->wMCIDeviceID;
		if (uDevice)
		{
			DWORD dw;
								
			dw = mciSendCommand(uDevice,
			MCI_SETVIDEO,
			MCI_DGV_SETVIDEO_ITEM | MCI_DGV_SETVIDEO_VALUE,
			(DWORD) (MCI_DGV_SETVIDEO_PARMS FAR *)&dgv);
			OutputDebugString("set draw proc!\n");
			if (dw != 0)
			{
				MessageBox(GetFocus(),
					"The currently installed MCIAVI does not "
					"support the MCI_AVI_SETVIDEO_DRAW_PROCEDURE "
					"command during play.","MCI Problem",
					MB_OK | MB_ICONHAND);
			}
		}
		else
		{
			MessageBox(GetFocus(),"movie info has no device id",
				"real bummer",MB_OK);
		}
	}    
    setMovie(pMovieInfo, pMovieInfo->dwCurrentFrame, NULL);
    {
    RECT rcClient, rcWindow;      //rcMovieBounds, rc
    MCI_DGV_RECT_PARMS   mciRect;
    BOOL retcode = TRUE;
    
    /* if there is no movie yet then just get out of here */
    GetClientRect(hWnd, &rcClient);  /* get the parent windows rect */
    GetWindowRect(hWnd, &rcWindow);
    mciSendCommand(pMovieInfo->wMCIDeviceID, MCI_WHERE,
                  (DWORD)(MCI_DGV_WHERE_SOURCE),
                  (DWORD)(LPMCI_DGV_RECT_PARMS)&mciRect);
    
    }
    
    pMovieInfo->fPlaying = FALSE;

    bFileLoaded = TRUE;
    wsprintf(szBuf, "%ld of %ld", pMovieInfo->dwCurrentFrame,
                    pMovieInfo->dwMovieLength);
    SetDlgItemText(hwndDlg, ID_CURRENTFRAME, szBuf);
    
    // now try opening a HOT file
    
    memset(szFileName, 0, sizeof(szFileName));
    memset(szFileTitle, 0, sizeof(szFileTitle));
    memset(&ofn, 0, sizeof(OPENFILENAME));
    
    ofn.lStructSize       = sizeof(OPENFILENAME);
    ofn.hwndOwner         = hWnd;
    ofn.lpstrFilter       = szFilterSpec2;
    ofn.lpstrCustomFilter = NULL;
    ofn.nMaxCustFilter    = 0;
    ofn.nFilterIndex      = 1;
    ofn.lpstrFile         = szFileName;
    ofn.nMaxFile          = MAXFILENAME;
    ofn.lpstrInitialDir   = NULL;
    ofn.lpstrFileTitle    = szFileTitle;
    ofn.nMaxFileTitle     = MAXFILENAME;
    ofn.lpstrTitle        = "Open Hotspot File";
    ofn.lpstrDefExt       = "HOT";
    ofn.Flags             = 0;
    
    if (!GetOpenFileName ((LPOPENFILENAME)&ofn))
            return TRUE;
    
    lstrcpy(pMovieInfo->szIniFileName, ofn.lpstrFile);
    InitHotspots(pMovieInfo, ofn.lpstrFile);
    if (pMovieInfo->pHotspotList && pMovieInfo->hwndMovie)                    
        {
        HDC hDC;
        
        hDC = GetDC(pMovieInfo->hwndMovie);
        DrawRects(hDC, pMovieInfo);            
        ReleaseDC(pMovieInfo->hwndMovie, hDC);
        }
    return TRUE;
}