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 + -
显示快捷键?