home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectShow_WinXP / VMR / Cube / commands.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-08  |  6.3 KB  |  285 lines

  1. //------------------------------------------------------------------------------
  2. // File: commands.cpp
  3. //
  4. // Desc: DirectShow sample code - Processes commands from the user
  5. //
  6. // Copyright (c) 1994-2001 Microsoft Corporation.  All rights reserved.
  7. //------------------------------------------------------------------------------
  8.  
  9. #include <streams.h>
  10. #include <mmreg.h>
  11. #include <commctrl.h>
  12.  
  13. #include "project.h"
  14. #include <stdio.h>
  15.  
  16. extern void RepositionMovie(HWND hwnd);
  17.  
  18. extern CMpegMovie  *pMpegMovie;
  19.  
  20.  
  21. /******************************Public*Routine******************************\
  22. * ProcessOpen
  23. *
  24. \**************************************************************************/
  25. void
  26. ProcessOpen(
  27.     TCHAR achFileName[][MAX_PATH],
  28.     DWORD dwNumFiles,
  29.     BOOL bPlay
  30.     )
  31. {
  32.     /*
  33.     ** If we currently have a video loaded we need to discard it here.
  34.     */
  35.     if(g_State & VCD_LOADED)
  36.     {
  37.         VcdPlayerCloseCmd();
  38.     }
  39.  
  40.     pMpegMovie = new CMpegMovie(hwndApp);
  41.     if(pMpegMovie)
  42.     {
  43.         HRESULT hr = pMpegMovie->OpenMovie(achFileName, dwNumFiles);
  44.         if(SUCCEEDED(hr))
  45.         {
  46.             g_State = (VCD_LOADED | VCD_STOPPED);
  47.  
  48.             RepositionMovie(hwndApp);
  49.             InvalidateRect(hwndApp, NULL, TRUE);
  50.  
  51.             if(bPlay)
  52.             {
  53.                 pMpegMovie->PlayMovie();
  54.             }
  55.         }
  56.         else
  57.         {
  58.             MessageBox(hwndApp, TEXT("Failed to open the movie! "),
  59.                 IdStr(STR_APP_TITLE), MB_OK);
  60.  
  61.             pMpegMovie->CloseMovie();
  62.             delete pMpegMovie;
  63.             pMpegMovie = NULL;
  64.         }
  65.     }
  66.  
  67.     InvalidateRect(hwndApp, NULL, FALSE);
  68.     UpdateWindow(hwndApp);
  69. }
  70.  
  71.  
  72. /******************************Public*Routine******************************\
  73. * VcdPlayerOpenCmd
  74. *
  75. \**************************************************************************/
  76. BOOL
  77. VcdPlayerOpenCmd(
  78.     void
  79.     )
  80. {
  81.     static OPENFILENAME ofn;
  82.     static BOOL fFirstTime = TRUE;
  83.     BOOL fRet = FALSE;
  84.     TCHAR achFileName[MAXSTREAMS][MAX_PATH];
  85.     TCHAR achFilter[MAX_PATH];
  86.     LPTSTR lp;
  87.     DWORD dwNumFiles = 0;
  88.  
  89.     if(fFirstTime)
  90.     {
  91.         ofn.lStructSize = sizeof(ofn);
  92.         ofn.hwndOwner = hwndApp;
  93.         ofn.Flags = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST |
  94.             OFN_SHAREAWARE | OFN_PATHMUSTEXIST;
  95.     }
  96.  
  97.     lstrcpy(achFilter, IdStr(STR_FILE_FILTER));
  98.     ofn.lpstrFilter = achFilter;
  99.  
  100.     /*
  101.     ** Convert the resource string into to something suitable for
  102.     ** GetOpenFileName ie.  replace '#' characters with '\0' characters.
  103.     */
  104.     for(lp = achFilter; *lp; lp++)
  105.     {
  106.         if(*lp == TEXT('#'))
  107.         {
  108.             *lp = TEXT('\0');
  109.         }
  110.     }
  111.  
  112.     for (DWORD i = 0; i < MAXSTREAMS; i++)
  113.     {
  114.         ofn.lpstrFile = achFileName[i];
  115.         ofn.nMaxFile = sizeof(achFileName[i]) / sizeof(TCHAR);
  116.         ZeroMemory(achFileName[i], sizeof(achFileName[i]));
  117.  
  118.         switch (i)
  119.         {
  120.         case 0:
  121.             // load first file
  122.             ofn.lpstrTitle = TEXT("Select First Media File");
  123.             break;
  124.         case 1:
  125.             // load first file
  126.             ofn.lpstrTitle = TEXT("Select Second Media File");
  127.             break;
  128.         case 2:
  129.             // load first file
  130.             ofn.lpstrTitle = TEXT("Select Third Media File");
  131.             break;
  132.         }
  133.  
  134.         fRet = GetOpenFileName(&ofn);
  135.         if(!fRet)
  136.         {
  137.             break;
  138.         }
  139.         dwNumFiles++;
  140.     } // for i
  141.     fFirstTime = FALSE;
  142.  
  143.     if (0 == dwNumFiles)
  144.     {
  145.         return fRet;
  146.     }
  147.  
  148.     ProcessOpen(achFileName, dwNumFiles);
  149.  
  150.     return fRet;
  151. }
  152.  
  153. /******************************Public*Routine******************************\
  154. * VcdPlayerCloseCmd
  155. *
  156. \**************************************************************************/
  157. BOOL
  158. VcdPlayerCloseCmd(
  159.     void
  160.     )
  161. {
  162.     if(pMpegMovie)
  163.     {
  164.         g_State = VCD_NO_CD;
  165.         pMpegMovie->StopMovie();
  166.         pMpegMovie->CloseMovie();
  167.         delete pMpegMovie;
  168.         pMpegMovie = NULL;
  169.     }
  170.  
  171.     // Redraw main window
  172.     InvalidateRect(hwndApp, NULL, FALSE);
  173.     UpdateWindow(hwndApp);
  174.  
  175.     return TRUE;
  176. }
  177.  
  178. /******************************Public*Routine******************************\
  179. * VcdPlayerPlayCmd
  180. *
  181. \**************************************************************************/
  182. BOOL
  183. VcdPlayerPlayCmd(
  184.     void
  185.     )
  186. {
  187.     BOOL fStopped = (g_State & VCD_STOPPED);
  188.     BOOL fPaused  = (g_State & VCD_PAUSED);
  189.  
  190.     if((fStopped || fPaused))
  191.     {
  192.         if(pMpegMovie)
  193.         {
  194.             pMpegMovie->PlayMovie();
  195.         }
  196.  
  197.         g_State &= ~(fStopped ? VCD_STOPPED : VCD_PAUSED);
  198.         g_State |= VCD_PLAYING;
  199.     }
  200.  
  201.     return TRUE;
  202. }
  203.  
  204.  
  205. /******************************Public*Routine******************************\
  206. * VcdPlayerStopCmd
  207. *
  208. \**************************************************************************/
  209. BOOL
  210. VcdPlayerStopCmd(
  211.     void
  212.     )
  213. {
  214.     BOOL fPlaying = (g_State & VCD_PLAYING);
  215.     BOOL fPaused  = (g_State & VCD_PAUSED);
  216.  
  217.     if((fPlaying || fPaused))
  218.     {
  219.         if(pMpegMovie)
  220.         {
  221.             pMpegMovie->StopMovie();
  222.         }
  223.  
  224.         g_State &= ~(fPlaying ? VCD_PLAYING : VCD_PAUSED);
  225.         g_State |= VCD_STOPPED;
  226.     }
  227.     return TRUE;
  228. }
  229.  
  230.  
  231. /******************************Public*Routine******************************\
  232. * VcdPlayerPauseCmd
  233. *
  234. \**************************************************************************/
  235. BOOL
  236. VcdPlayerPauseCmd(
  237.     void
  238.     )
  239. {
  240.     BOOL fPlaying = (g_State & VCD_PLAYING);
  241.     BOOL fPaused  = (g_State & VCD_PAUSED);
  242.  
  243.     if(fPlaying)
  244.     {
  245.         if(pMpegMovie)
  246.         {
  247.             pMpegMovie->PauseMovie();
  248.         }
  249.  
  250.         g_State &= ~VCD_PLAYING;
  251.         g_State |= VCD_PAUSED;
  252.     }
  253.     else if(fPaused)
  254.     {
  255.         if(pMpegMovie)
  256.         {
  257.             pMpegMovie->PlayMovie();
  258.         }
  259.  
  260.         g_State &= ~VCD_PAUSED;
  261.         g_State |= VCD_PLAYING;
  262.     }
  263.  
  264.     return TRUE;
  265. }
  266.  
  267.  
  268. /******************************Public*Routine******************************\
  269. * VcdPlayerRewindCmd
  270. *
  271. \**************************************************************************/
  272. BOOL
  273. VcdPlayerRewindCmd(
  274.     void
  275.     )
  276. {
  277.     if(pMpegMovie)
  278.     {
  279.         pMpegMovie->SeekToPosition((REFTIME)0,FALSE);
  280.     }
  281.  
  282.     return TRUE;
  283. }
  284.  
  285.