コード例 #1
0
/*
	playMovie -- looks at wDirection parameter and
		sends MCI a MCI_PLAY command (optionally with
			MCI_DGV_PLAY_REVERSE flag set) OR
		sends MCI a MCI_PAUSE command
*/
void playMovie(PMOVIEINFO pMovieInfo, WORD wDirection)
{
   pMovieInfo->fPlaying = !pMovieInfo->fPlaying;    /* swap the play flag */
   if (wDirection == NULL)
       pMovieInfo->fPlaying = FALSE;    /* wDirection == NULL means PAUSE */

   /* play/pause the AVI movie */
   if (pMovieInfo->fPlaying)
   {
       MCI_DGV_PLAY_PARMS   mciPlay;
       DWORD dwFlags = MCI_NOTIFY;
       
       pMovieInfo->lLastSeek = GetMovieFrame(pMovieInfo);

       /* init to play all */
       mciPlay.dwCallback = MAKELONG(pMovieInfo->hwndMovie,0);
       mciPlay.dwFrom = mciPlay.dwTo = 0;       
       if (wDirection == 2)
           dwFlags |= MCI_DGV_PLAY_REVERSE;
       
       mciSendCommand(pMovieInfo->wMCIDeviceID, MCI_PLAY, dwFlags,
                       (DWORD)(LPMCI_DGV_PLAY_PARMS)&mciPlay);
   }
   else
   {
       MCI_DGV_PAUSE_PARMS  mciPause;
                        
       /* tell it to pause */
       mciSendCommand(pMovieInfo->wMCIDeviceID,MCI_PAUSE,MCI_WAIT,
                     (DWORD)(LPMCI_DGV_PAUSE_PARMS)&mciPause);
   }
}
コード例 #2
0
/*
	OnButtonDown -- walks through hotspot list.  For each hotspot,
		uses PtInRect to see if its in the rect.  If it is, it uses
		VwrCommand to transmit the hotspot's command to viewer.  Then
		it looks at the Stop/Continue/Jump to setting and uses the return
		value to handle Stop and Continue, or calls setMovie to do a
		jump.
*/ 
BOOL OnButtonDown(PMOVIEINFO pMovieInfo, USHORT msg, USHORT wp, LONG lp)
{
    PHOTSPOT pHotspot;
    DWORD dwFrame;                      
    POINT pt;
    HWND hwnd;
    
    if (!pMovieInfo)
        return FALSE;
    
    pHotspot = pMovieInfo->pHotspotList;
    pt = MAKEPOINT(lp);
    dwFrame = GetMovieFrame(pMovieInfo);
    
    while (pHotspot)
        {        
        if (dwFrame >= pHotspot->BeginFrame && dwFrame <= pHotspot->EndFrame)
            {
            if (PtInRect(&pHotspot->rc, pt) != 0)
                {                
                hwnd = GetParent(pMovieInfo->hwndParent);
                if (!hwnd)
                    hwnd = pMovieInfo->hwndParent;
                VwrCommand(VwrFromHinst(GetWindowWord(hwnd, GWW_HINSTANCE)),
                                NULL, pHotspot->pszCommand, cmdoptNONE);
                switch (pHotspot->OnClick)
                    {
                    case ID_CONTINUE:
                        return (TRUE);                        
                    case ID_STOP:
                        return (FALSE);
                    case ID_JUMP:
                        setMovie(pMovieInfo, pHotspot->ToFrame, NULL);
                        pMovieInfo->dwCurrentFrame = pHotspot->ToFrame;
                        pMovieInfo->fPlaying = FALSE;
                        playMovie(pMovieInfo, 1);
                        return (TRUE);                        
                    default:
                        return (TRUE);                                            
                    }                                
                }
            }
        pHotspot = pHotspot->pNext;                        
        }
    return (TRUE);        
}
コード例 #3
0
/*
	OnButtonDown -- walks through hotspot list.  For each hotspot,
		uses PtInRect to see if its in the rect.  If it is, it uses
		VwrCommand to transmit the hotspot's command to viewer.  Then
		it looks at the Stop/Continue/Jump to setting and uses the return
		value to handle Stop and Continue, or calls setMovie to do a
		jump.
*/ 
BOOL OnButtonDown(PMOVIEINFO pMovieInfo, USHORT msg, USHORT wp, LONG lp)
{
	PHOTSPOT pHotspot;
	DWORD dwFrame;
	POINT pt;

	if (!pMovieInfo)
		return FALSE;
	pHotspot = pMovieInfo->pHotspotList;
	pt = MAKEPOINT(lp);
	dwFrame = GetMovieFrame(pMovieInfo);
	while (pHotspot)
	{
		if (dwFrame >= pHotspot->BeginFrame && dwFrame <= pHotspot->EndFrame)
		{
			if (PtInRect(&pHotspot->rc, pt) != 0)
			{
				FireHspClick(pMovieInfo->hctl, pHotspot);
				switch (pHotspot->OnClick)
				{
				case ID_CONTINUE:
					return (TRUE);
				case ID_STOP:
					return (FALSE);
				case ID_JUMP:
					setMovie(pMovieInfo, pHotspot->ToFrame, NULL);
					pMovieInfo->dwCurrentFrame = pHotspot->ToFrame;
					pMovieInfo->fPlaying = FALSE;
					playMovie(pMovieInfo, 1);
					return (TRUE);
					default:
					return (TRUE);
				}
			}
		}
		pHotspot = pHotspot->pNext;
	}
	return (TRUE);
}
コード例 #4
0
/*
	stepMovie -- stops movie if playing, then steps one frame:
		wDirection == MCI_STEP means forward, anything else means reverse.
		it does this by using MCI_STEP command with MCI_DGV_STEP_FRAMES,
		optionally with MCI_DGV_STEP_REVERSE flag set
		
*/
void stepMovie(PMOVIEINFO pMovieInfo, HWND hWnd, WORD wDirection)
{
   MCI_DGV_STEP_PARMS   mciStep;
   
   pMovieInfo->lLastSeek = GetMovieFrame(pMovieInfo);
   
   if (pMovieInfo->fPlaying)
       playMovie(pMovieInfo, NULL);  /* turn off the movie */

   mciStep.dwFrames = 1L;
   if (wDirection == MCI_STEP)
   {
       (pMovieInfo->lLastSeek)+=2;
       mciSendCommand(pMovieInfo->wMCIDeviceID, MCI_STEP, MCI_DGV_STEP_FRAMES,
           (DWORD)(LPMCI_DGV_STEP_PARMS)&mciStep);
   }
   else
   {
       (pMovieInfo->lLastSeek)-=2;
       mciSendCommand(pMovieInfo->wMCIDeviceID, MCI_STEP, 
           MCI_DGV_STEP_FRAMES|MCI_DGV_STEP_REVERSE,
           (DWORD)(LPMCI_DGV_STEP_PARMS)&mciStep);
   }
}