player.cpp

来自「一个摄像机的程序」· C++ 代码 · 共 490 行 · 第 1/2 页

CPP
490
字号
                        if (bIsOpenMovie)
                                MCIWndClose(hWndMCI);  // close an open movie
                        MCIWndDestroy(hWndMCI);    // now destroy the MCIWnd window
                        PostQuitMessage(0);
                        return 0;

                case MCIWNDM_NOTIFYSIZE:
			if (!IsIconic(hWnd)) {
                            if (bIsOpenMovie){
                                /* adjust to size of the movie window */
                                GetWindowRect(hWndMCI, &rc);
                                AdjustWindowRect(&rc, GetWindowLong(hWnd, GWL_STYLE), TRUE);
                                SetWindowPos(hWnd, NULL, 0, 0, rc.right - rc.left,
                                        rc.bottom - rc.top,
                                        SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE);
                            } else {
                                /* movie closed, adjust to the default size */
                                int iWinHeight;

                                iWinHeight = GetSystemMetrics(SM_CYCAPTION) +
                                                GetSystemMetrics(SM_CYMENU) +
                                                (GetSystemMetrics(SM_CYFRAME) * 2);
                                SetWindowPos(hWnd, NULL, 0, 0, 180, iWinHeight,
                                        SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE);
			    }
                        }
                        break;

                case WM_ACTIVATE:
                case WM_QUERYNEWPALETTE:
                case WM_PALETTECHANGED:
                        //
                        // Forward palette-related messages through to the MCIWnd,
                        // so it can do the right thing.
                        //
                        if (hWndMCI)
                                return SendMessage(hWndMCI, message, wParam, lParam);
                        break;
        } /* switch */
        return DefWindowProc(hWnd, message, wParam, lParam);
}

void UpdateMenubar(HWND hWnd)
{
        WORD w,wp;

        if (bIsOpenMovie){
                w = MF_ENABLED|MF_BYPOSITION;
				wp = MF_ENABLED;		
        } else {
                w = MF_GRAYED|MF_BYPOSITION;
				wp = MF_GRAYED;		
        }

		
        EnableMenuItem(hMenuBar, 1, w); /* change the Movie menu (#1) */
		EnableMenuItem(hMenuBar, ID_PLAY, wp);
        DrawMenuBar(hWnd);      /* re-draw the menu bar */
}


void UpdateTitle(HWND hWnd, LPSTR lpstrMovie)
{
        char achNewTitle[BUFFER_LENGTH];        // space for the title

        if (lpstrMovie != NULL)
                wsprintf((LPSTR)achNewTitle,"%s - %s", (LPSTR)szAppName,lpstrMovie);
        else
                lstrcpy((LPSTR)achNewTitle, (LPSTR)szAppName);
        SetWindowText(hWnd, (LPSTR)achNewTitle);
}


// OpenMCIMovieFile - open an AVI movie. 
void OpenMCIMovieFile(HWND hWnd)
{

	/*
		static char szFile [BUFFER_LENGTH];
        static char szFileTitle [BUFFER_LENGTH];



		OPENFILENAME ofn;


        memset(&ofn, 0, sizeof(ofn));
        ofn.lStructSize = sizeof(ofn);
        ofn.hwndOwner = hWnd;
        ofn.lpstrFilter = "Video for Windows\0*.avi\0\0";
        ofn.lpstrFile = szFile;
        ofn.nMaxFile = sizeof(szFile);
        ofn.lpstrFileTitle = szFileTitle;
        ofn.nMaxFileTitle = sizeof(szFileTitle);
        ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

		//Strange , this statement here cause the setactivetimer_notify to work properly
		if (GetOpenFileName(&ofn)){        

		}


        if (bIsOpenMovie)
             MCIWndClose(hWndMCI);

 
        bIsOpenMovie = TRUE;              
        if (MCIWndOpen(hWndMCI, playfiledir, 0) == 0){
		
                ShowWindow(hWndMCI, SW_SHOW);
        } else {
        
                MessageBox(hWnd, "Unable to open Movie", NULL,
                      MB_ICONEXCLAMATION|MB_OK);
                bIsOpenMovie = FALSE;
        }

    
        
        UpdateMenubar(hWnd);
        if (bIsOpenMovie)
                UpdateTitle(hWnd, (LPSTR)"Playing AVI Movie");
        else
                UpdateTitle(hWnd, NULL);

        
        InvalidateRect(hWnd, NULL, FALSE);
        UpdateWindow(hWnd);
		*/


	
		OPENFILENAME ofn;

        static char szFile [BUFFER_LENGTH];
        static char szFileTitle [BUFFER_LENGTH];


        memset(&ofn, 0, sizeof(ofn));
        ofn.lStructSize = sizeof(ofn);
        ofn.hwndOwner = hWnd;
        ofn.lpstrFilter = "Video for Windows\0*.avi\0\0";
        ofn.lpstrFile = szFile;
        ofn.nMaxFile = sizeof(szFile);
        ofn.lpstrFileTitle = szFileTitle;
        ofn.nMaxFileTitle = sizeof(szFileTitle);
        ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

        
        if (GetOpenFileName(&ofn)){        
            
                if (bIsOpenMovie)
                        MCIWndClose(hWndMCI);

                
            
                bIsOpenMovie = TRUE;              // assume the best
				if (MCIWndOpen(hWndMCI, ofn.lpstrFile, 0) == 0){
                        ShowWindow(hWndMCI, SW_SHOW);
                } else {
            
                        MessageBox(hWnd, "Unable to open Movie", NULL,
                              MB_ICONEXCLAMATION|MB_OK);
                        bIsOpenMovie = FALSE;
                }
        }


        UpdateMenubar(hWnd);
        if (bIsOpenMovie)
                UpdateTitle(hWnd, (LPSTR)ofn.lpstrFileTitle);
        else
                UpdateTitle(hWnd, NULL);

        // update  
        InvalidateRect(hWnd, NULL, FALSE);
        UpdateWindow(hWnd);
		
}



void OpenMCIMovieFileInit(HWND hWnd)
{

        static char szFile [BUFFER_LENGTH];
        static char szFileTitle [BUFFER_LENGTH];

        if (bIsOpenMovie)
                MCIWndClose(hWndMCI);


		//MCIWndSetActiveTimer(hWndMCI, 20);
        
 
        bIsOpenMovie = TRUE;              
        if (MCIWndOpen(hWndMCI, playfiledir, 0) == 0){
		
                ShowWindow(hWndMCI, SW_SHOW);
        } else {
        
                MessageBox(hWnd, "Unable to open Movie", NULL,
                      MB_ICONEXCLAMATION|MB_OK);
                bIsOpenMovie = FALSE;
        }

    
        
        UpdateMenubar(hWnd);
        if (bIsOpenMovie)
                UpdateTitle(hWnd, (LPSTR)"Playing AVI Movie");
        else
                UpdateTitle(hWnd, NULL);

        
        InvalidateRect(hWnd, NULL, FALSE);
        UpdateWindow(hWnd);


}



/* AboutDlgProc()
 *
 * Dialog Procedure for the "about" dialog box.
 *
 */

BOOL CALLBACK AboutDlgProc(
        HWND    hwnd,
        UINT    msg,
        WPARAM  wParam,
        LPARAM  lParam)
{
        switch (msg) {
        case WM_COMMAND:
                EndDialog(hwnd, TRUE);
                return TRUE;
        case WM_INITDIALOG:
                return TRUE;
        }
        return FALSE;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?