/*****************************Private*Routine******************************\ * VideoCd_OnGraphNotify * * This is where we get any notifications from the filter graph. * \**************************************************************************/ void VideoCd_OnGraphNotify( int stream ) { long lEventCode; lEventCode = pMpegMovie->GetMovieEventCode(); switch(lEventCode) { case EC_FULLSCREEN_LOST: SetPlayButtonsEnableState(); break; case EC_USERABORT: case EC_ERRORABORT: VcdPlayerStopCmd(); SetPlayButtonsEnableState(); break; case EC_COMPLETE: VcdPlayerRewindCmd(); break; default: break; } }
/*****************************Private*Routine******************************\ * VideoCd_OnGraphNotify * * This is where we get any notifications from the filter graph. * \**************************************************************************/ void VideoCd_OnGraphNotify( void ) { long lEventCode; lEventCode = pMovie->GetMovieEventCode(); switch(lEventCode) { case EC_STEP_COMPLETE: g_State &= ~VCD_STEPPING; SetPlayButtonsEnableState(); break; case EC_COMPLETE: VcdPlayerRewindCmd(); break; case EC_USERABORT: case EC_ERRORABORT: VcdPlayerStopCmd(); SetPlayButtonsEnableState(); break; default: break; } }
/*****************************Private*Routine******************************\ * VideoCd_OnCommand * \**************************************************************************/ void VideoCd_OnCommand( HWND hwnd, int id, HWND hwndCtl, UINT codeNotify ) { switch(id) { case IDM_FILE_OPEN: if(VcdPlayerOpenCmd()) VcdPlayerPlayCmd(); break; case IDM_FILE_CLOSE: VcdPlayerCloseCmd(); QzFreeUnusedLibraries(); break; case IDM_FILE_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hwnd, (DLGPROC) AboutDlgProc); break; case IDM_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0L); break; case IDM_MOVIE_PLAY: VcdPlayerPlayCmd(); break; case IDM_MOVIE_STOP: VcdPlayerStopCmd(); VcdPlayerRewindCmd(); break; case IDM_MOVIE_PAUSE: VcdPlayerPauseCmd(); break; case IDM_FULL_SCREEN: if(pMpegMovie) { BOOL bFullScreen = (BOOL)SendMessage(g_hwndToolbar, TB_ISBUTTONCHECKED, IDM_FULL_SCREEN, 0); SetFullScreenMode(bFullScreen); } break; } SetPlayButtonsEnableState(); }
/*****************************Private*Routine******************************\ * VideoCd_OnKeyUp * \**************************************************************************/ void VideoCd_OnKeyUp( HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags ) { // Catch escape sequences to stop fullscreen mode if((vk == VK_ESCAPE) || (vk == VK_RETURN)) { if(pMpegMovie && IsFullScreenMode()) { SetFullScreenMode(FALSE); SetPlayButtonsEnableState(); } } }
/*****************************Private*Routine******************************\ * InitInstance * * This function is called at initialization time for every instance of * this application. This function performs initialization tasks that * cannot be shared by multiple instances. * * In this case, we save the instance handle in a static variable and * create and display the main program window. * \**************************************************************************/ BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) { HWND hwnd; RECT rc; /* ** Save the instance handle in static variable, which will be used ** in many subsequent calls to Windows. */ hInst = hInstance; rc.left = rc.top = 100; rc.bottom = rc.right = 400; /* ** Create a main window for this application instance. */ hwnd = CreateWindow(szClassName, IdStr(STR_APP_TITLE), g_Style, rc.left, rc.top, rc.right, rc.bottom, NULL, NULL, hInstance, NULL); /* ** If window could not be created, return "failure" */ if(NULL == hwnd) { return FALSE; } hwndApp = hwnd; /* ** Make the window visible; update its client area; and return "success" */ SetPlayButtonsEnableState(); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); return TRUE; }
/*****************************Private*Routine******************************\ * VideoCd_OnCommand * \**************************************************************************/ void VideoCd_OnCommand( HWND hwnd, int id, HWND hwndCtl, UINT codeNotify ) { switch(id) { case IDM_FILE_OPEN: if(VcdPlayerOpenCmd()) VcdPlayerPlayCmd(); break; case IDM_FILE_CLOSE: VcdPlayerCloseCmd(); QzFreeUnusedLibraries(); break; case IDM_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0L); break; case IDM_MOVIE_PLAY: VcdPlayerPlayCmd(); break; case IDM_MOVIE_STOP: VcdPlayerStopCmd(); VcdPlayerRewindCmd(); break; case IDM_MOVIE_PAUSE: VcdPlayerPauseCmd(); break; case IDM_MOVIE_SKIP_FORE: VcdPlayerSeekCmd(1.0); break; case IDM_MOVIE_SKIP_BACK: VcdPlayerSeekCmd(-1.0); break; case IDM_MOVIE_PREVTRACK: if(pMovie) { VcdPlayerSeekCmd(-pMovie->GetCurrentPosition()); } break; case IDM_MOVIE_STEP: VcdPlayerPauseCmd(); VcdPlayerStepCmd(); break; case IDM_TIME: case IDM_FRAME: case IDM_FIELD: case IDM_SAMPLE: case IDM_BYTES: if(pMovie) { g_TimeFormat = VcdPlayerChangeTimeFormat(id); } break; case IDM_HELP_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hwnd, (DLGPROC) AboutDlgProc); break; default: if(id > ID_RECENT_FILE_BASE && id <= (ID_RECENT_FILE_BASE + MAX_RECENT_FILES + 1)) { ProcessOpen(aRecentFiles[id - ID_RECENT_FILE_BASE - 1]); VcdPlayerPlayCmd(); } break; } SetPlayButtonsEnableState(); }
/*****************************Private*Routine******************************\ * InitInstance * * * This function is called at initialization time for every instance of * this application. This function performs initialization tasks that * cannot be shared by multiple instances. * * In this case, we save the instance handle in a static variable and * create and display the main program window. * \**************************************************************************/ BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) { HWND hwnd; RECT rc; POINT pt; /* ** Save the instance handle in static variable, which will be used in ** many subsequence calls from this application to Windows. */ hInst = hInstance; if(! LoadWindowPos(&rc)) { rc.left = rc.top = 0; rc.bottom = rc.right = 400; } /* ** Create a main window for this application instance. */ hwnd = CreateWindow(szClassName, IdStr(STR_APP_TITLE), WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance, NULL); /* ** If window could not be created, return "failure" */ if(NULL == hwnd) { return FALSE; } hwndApp = hwnd; nRecentFiles = GetRecentFiles(nRecentFiles, 2); pt.x = lMovieOrgX = 0; pt.y = lMovieOrgY = 0; // if we fail to get the working area (screen-tray), then assume // the screen is 640x480 // if(!SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, FALSE)) { rc.top = rc.left = 0; rc.right = 640; rc.bottom = 480; } if(!PtInRect(&rc, pt)) { lMovieOrgX = lMovieOrgY = 0L; } /* ** Make the window visible; update its client area; and return "success" */ SetPlayButtonsEnableState(); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); return TRUE; }
/******************************Public*Routine******************************\ * WinMain * * * Windows recognizes this function by name as the initial entry point * for the program. This function calls the application initialization * routine, if no other instance of the program is running, and always * calls the instance initialization routine. It then executes a message * retrieval and dispatch loop that is the top-level control structure * for the remainder of execution. The loop is terminated when a WM_QUIT * message is received, at which time this function exits the application * instance by returning the value passed by PostQuitMessage(). * * If this function must abort before entering the message loop, it * returns the conventional value NULL. * \**************************************************************************/ int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLineOld, int nCmdShow ) { USES_CONVERSION; LPTSTR lpCmdLine = A2T(lpCmdLineOld); HRESULT hres = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if(hres == S_FALSE) { CoUninitialize(); return FALSE; } if(!hPrevInstance) { if(!InitApplication(hInstance)) { return FALSE; } } /* ** Perform initializations that apply to a specific instance */ if(!InitInstance(hInstance, nCmdShow)) { return FALSE; } /* Verify that the VMR is present on this system */ if(!VerifyVMR()) return FALSE; /* Look for options */ while(lpCmdLine && (*lpCmdLine == '-' || *lpCmdLine == '/')) { if ((lpCmdLine[1] == 'P') || (lpCmdLine[1] == 'p')) { g_bPlay = TRUE; lpCmdLine += 2; } else { break; } while(lpCmdLine[0] == ' ') { lpCmdLine++; } } if(lpCmdLine != NULL && lstrlen(lpCmdLine) > 0) { ProcessOpen(lpCmdLine, g_bPlay); SetPlayButtonsEnableState(); } /* ** Acquire and dispatch messages until a WM_QUIT message is received. */ return DoMainLoop(); }