/* CleanupStuff -- Removes properties and hotspots from windows in movieinfo structure. Frees the handle to the movieinfo, too! */ LONG FAR PASCAL _export SbClsProc (HWND hwnd, USHORT msg, USHORT wp, LONG lp) { HANDLE hglb; PMOVIEINFO pMovieInfo; LRESULT lr; hglb = GetProp(hwnd, (LPSTR)szMovieInfo); pMovieInfo = (PMOVIEINFO)GlobalLock(hglb); switch (msg) { case WM_LBUTTONDOWN: if (0 == (OnButtonDown(pMovieInfo, msg, wp, lp))) { Terminate(pMovieInfo); return 0L; } break; case MM_MCINOTIFY: switch(wp) { case MCI_NOTIFY_SUCCESSFUL: pMovieInfo->fPlaying = FALSE; Terminate(pMovieInfo); return 0L; } break; case WM_DESTROY: lr = CallWindowProc(pMovieInfo->lpfnOldProc, hwnd, msg, wp, lp); RemoveProp(hwnd, (LPSTR)szMovieInfo); if (pMovieInfo) DeleteHotspotList(pMovieInfo); if (pMovieInfo) SetWindowLong (hwnd, GWL_WNDPROC, (LONG) pMovieInfo->lpfnOldProc); GlobalUnlock(hglb); GlobalFree(hglb); hglb = NULL; pMovieInfo = NULL; break; } if (pMovieInfo) { lr = CallWindowProc(pMovieInfo->lpfnOldProc, hwnd, msg, wp, lp); if (hglb) GlobalUnlock(hglb); return (lr); } else return 0L; }
/* CleanupStuff -- Removes properties and hotspots from windows in movieinfo structure. Frees the handle to the movieinfo, too! */ void CleanupStuff(HWND hwnd, PMOVIEINFO pMovieInfo, HANDLE hglb) { RemoveProp(hwnd, (LPSTR)szMovieInfo); if (pMovieInfo) { if (pMovieInfo->hwndParent) RemoveProp(pMovieInfo->hwndParent, (LPSTR)szMovieInfo); DeleteHotspotList(pMovieInfo); } if (pMovieInfo) SetWindowLong (hwnd, GWL_WNDPROC, (LONG) pMovieInfo->lpfnOldProc); GlobalUnlock(hglb); GlobalFree(hglb); }
/* 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; }