Index: base/applications/mplay32/lang/bg-BG.rc =================================================================== --- base/applications/mplay32/lang/bg-BG.rc (revision 62092) +++ base/applications/mplay32/lang/bg-BG.rc (working copy) @@ -13,6 +13,10 @@ MENUITEM SEPARATOR MENUITEM "Из&ход", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/cs-CZ.rc =================================================================== --- base/applications/mplay32/lang/cs-CZ.rc (revision 62092) +++ base/applications/mplay32/lang/cs-CZ.rc (working copy) @@ -14,6 +14,10 @@ MENUITEM SEPARATOR MENUITEM "&Ukončit", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/de-DE.rc =================================================================== --- base/applications/mplay32/lang/de-DE.rc (revision 62092) +++ base/applications/mplay32/lang/de-DE.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&Beenden", IDM_EXIT END + POPUP "&Ansicht" + BEGIN + MENUITEM "Einzelfenster-&Modus", IDM_SWITCHVIEW + END POPUP "&Gerät" BEGIN MENUITEM "&Eigenschaften", IDM_DEVPROPS Index: base/applications/mplay32/lang/en-US.rc =================================================================== --- base/applications/mplay32/lang/en-US.rc (revision 62092) +++ base/applications/mplay32/lang/en-US.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&Exit", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/es-ES.rc =================================================================== --- base/applications/mplay32/lang/es-ES.rc (revision 62092) +++ base/applications/mplay32/lang/es-ES.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&Salir", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/fr-FR.rc =================================================================== --- base/applications/mplay32/lang/fr-FR.rc (revision 62092) +++ base/applications/mplay32/lang/fr-FR.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&Quitter", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/he-IL.rc =================================================================== --- base/applications/mplay32/lang/he-IL.rc (revision 62092) +++ base/applications/mplay32/lang/he-IL.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&יציאה", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/it-IT.rc =================================================================== --- base/applications/mplay32/lang/it-IT.rc (revision 62092) +++ base/applications/mplay32/lang/it-IT.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&Esci", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/ja-JP.rc =================================================================== --- base/applications/mplay32/lang/ja-JP.rc (revision 62092) +++ base/applications/mplay32/lang/ja-JP.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "終了(&E)", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/nl-NL.rc =================================================================== --- base/applications/mplay32/lang/nl-NL.rc (revision 62092) +++ base/applications/mplay32/lang/nl-NL.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&Afsluiten", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/no-NO.rc =================================================================== --- base/applications/mplay32/lang/no-NO.rc (revision 62092) +++ base/applications/mplay32/lang/no-NO.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&Avslutt", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/pl-PL.rc =================================================================== --- base/applications/mplay32/lang/pl-PL.rc (revision 62092) +++ base/applications/mplay32/lang/pl-PL.rc (working copy) @@ -16,6 +16,10 @@ MENUITEM SEPARATOR MENUITEM "&Wyjdź", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/pt-BR.rc =================================================================== --- base/applications/mplay32/lang/pt-BR.rc (revision 62092) +++ base/applications/mplay32/lang/pt-BR.rc (working copy) @@ -11,6 +11,10 @@ MENUITEM SEPARATOR MENUITEM "&Sair", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/ro-RO.rc =================================================================== --- base/applications/mplay32/lang/ro-RO.rc (revision 62092) +++ base/applications/mplay32/lang/ro-RO.rc (working copy) @@ -15,6 +15,10 @@ MENUITEM SEPARATOR MENUITEM "I&eșire", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Dispozitiv" BEGIN MENUITEM "&Proprietăți…", IDM_DEVPROPS Index: base/applications/mplay32/lang/ru-RU.rc =================================================================== --- base/applications/mplay32/lang/ru-RU.rc (revision 62092) +++ base/applications/mplay32/lang/ru-RU.rc (working copy) @@ -9,6 +9,10 @@ MENUITEM SEPARATOR MENUITEM "&Выход", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/sk-SK.rc =================================================================== --- base/applications/mplay32/lang/sk-SK.rc (revision 62092) +++ base/applications/mplay32/lang/sk-SK.rc (working copy) @@ -14,6 +14,10 @@ MENUITEM SEPARATOR MENUITEM "S&končiť", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/sq-AL.rc =================================================================== --- base/applications/mplay32/lang/sq-AL.rc (revision 62092) +++ base/applications/mplay32/lang/sq-AL.rc (working copy) @@ -13,6 +13,10 @@ MENUITEM SEPARATOR MENUITEM "&Dil", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/sv-SE.rc =================================================================== --- base/applications/mplay32/lang/sv-SE.rc (revision 62092) +++ base/applications/mplay32/lang/sv-SE.rc (working copy) @@ -16,6 +16,10 @@ MENUITEM SEPARATOR MENUITEM "&Avsluta", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/tr-TR.rc =================================================================== --- base/applications/mplay32/lang/tr-TR.rc (revision 62092) +++ base/applications/mplay32/lang/tr-TR.rc (working copy) @@ -11,6 +11,10 @@ MENUITEM SEPARATOR MENUITEM "&Çıkış", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Aygıt" BEGIN MENUITEM "&Husûsiyetler", IDM_DEVPROPS Index: base/applications/mplay32/lang/uk-UA.rc =================================================================== --- base/applications/mplay32/lang/uk-UA.rc (revision 62092) +++ base/applications/mplay32/lang/uk-UA.rc (working copy) @@ -17,6 +17,10 @@ MENUITEM SEPARATOR MENUITEM "&Вихід", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/zh-CN.rc =================================================================== --- base/applications/mplay32/lang/zh-CN.rc (revision 62092) +++ base/applications/mplay32/lang/zh-CN.rc (working copy) @@ -11,6 +11,10 @@ MENUITEM SEPARATOR MENUITEM "退出(&E)", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/lang/zh-TW.rc =================================================================== --- base/applications/mplay32/lang/zh-TW.rc (revision 62092) +++ base/applications/mplay32/lang/zh-TW.rc (working copy) @@ -17,6 +17,10 @@ MENUITEM SEPARATOR MENUITEM "結束(&E)", IDM_EXIT END + POPUP "&View" + BEGIN + MENUITEM "Single-Window &Mode", IDM_SWITCHVIEW + END POPUP "&Device" BEGIN MENUITEM "&Properties", IDM_DEVPROPS Index: base/applications/mplay32/mplay32.c =================================================================== --- base/applications/mplay32/mplay32.c (revision 62092) +++ base/applications/mplay32/mplay32.c (working copy) @@ -18,7 +18,9 @@ WORD wDeviceId; BOOL bIsOpened = FALSE; BOOL bIsPaused = FALSE; +BOOL bIsSingleWindow = FALSE; UINT MaxFilePos = 0; +RECT PrevWindowPos; /* ToolBar Buttons */ @@ -34,9 +36,11 @@ {TBICON_FORWARD, IDC_FORWARD, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0} }; -void EnableMenuItems(void) +void EnableMenuItems(HWND hwnd) { MCI_GENERIC_PARMS mciGeneric; + MCI_DGV_RECT_PARMS mciVideoRect; + MCI_DGV_WINDOW_PARMSW mciVideoWindow; DWORD dwError; EnableMenuItem(hMainMenu, IDM_CLOSE_FILE, MF_BYCOMMAND | MF_ENABLED); @@ -46,14 +50,40 @@ { EnableMenuItem(hMainMenu, IDM_DEVPROPS, MF_BYCOMMAND | MF_ENABLED); } + + mciVideoWindow.hWnd = hwnd; + + dwError = mciSendCommand(wDeviceId, MCI_WINDOW, MCI_DGV_WINDOW_HWND | MCI_TEST, (DWORD)(LPSTR)&mciVideoWindow); + if (!dwError) + { + dwError = mciSendCommand(wDeviceId, MCI_WHERE, MCI_DGV_WHERE_SOURCE | MCI_TEST, (DWORD)(LPSTR)&mciVideoRect); + if (!dwError) + { + EnableMenuItem(hMainMenu, IDM_SWITCHVIEW, MF_BYCOMMAND | MF_ENABLED); + } + } } void DisableMenuItems(void) { EnableMenuItem(hMainMenu, IDM_CLOSE_FILE, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(hMainMenu, IDM_DEVPROPS, MF_BYCOMMAND | MF_GRAYED); + EnableMenuItem(hMainMenu, IDM_SWITCHVIEW, MF_BYCOMMAND | MF_GRAYED); } +void ResizeClientArea(HWND hwnd, int nWidth, int nHeight) +{ + RECT rcClientRect; + RECT rcWindowRect; + POINT ptDifference; + + GetClientRect(hwnd, &rcClientRect); + GetWindowRect(hwnd, &rcWindowRect); + ptDifference.x = (rcWindowRect.right - rcWindowRect.left) - rcClientRect.right; + ptDifference.y = (rcWindowRect.bottom - rcWindowRect.top) - rcClientRect.bottom; + MoveWindow(hwnd, rcWindowRect.left, rcWindowRect.top, nWidth + ptDifference.x, nHeight + ptDifference.y, TRUE); +} + static VOID SetImageList(HWND hwnd) { @@ -201,6 +231,77 @@ return FALSE; } +static VOID +SwitchViewMode(HWND hwnd) +{ + MCIERROR mciError; + MCI_DGV_RECT_PARMS mciVideoRect; + MCI_DGV_WINDOW_PARMSW mciVideoWindow; + RECT rcToolbarRect; + RECT rcTempRect; + + mciVideoWindow.hWnd = hwnd; + + mciError = mciSendCommand(wDeviceId, MCI_WINDOW, MCI_DGV_WINDOW_HWND | MCI_TEST, (DWORD)(LPSTR)&mciVideoWindow); + if (mciError) + { + return; + } + + mciError = mciSendCommand(wDeviceId, MCI_WHERE, MCI_DGV_WHERE_SOURCE | MCI_TEST, (DWORD)(LPSTR)&mciVideoRect); + if (mciError) + { + return; + } + + if (!bIsSingleWindow) + { + GetWindowRect(hwnd, &PrevWindowPos); + + SetParent(hTrackBar, hToolBar); + + mciError = mciSendCommand(wDeviceId, MCI_WHERE, MCI_DGV_WHERE_SOURCE, (DWORD)(LPSTR)&mciVideoRect); + if (mciError) + { + ShowMCIError(hwnd, mciError); + return; + } + + GetWindowRect(hToolBar, &rcToolbarRect); + ResizeClientArea(hwnd, mciVideoRect.rc.right, mciVideoRect.rc.bottom + (rcToolbarRect.bottom - rcToolbarRect.top)); + + mciError = mciSendCommand(wDeviceId, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD)(LPSTR)&mciVideoWindow); + if (mciError) + { + ShowMCIError(hwnd, mciError); + return; + } + + GetWindowRect(hToolBar, &rcTempRect); + MoveWindow(hTrackBar, 180, 0, rcTempRect.right - rcTempRect.left - 180, 25, TRUE); + + CheckMenuItem(hMainMenu, IDM_SWITCHVIEW, MF_BYCOMMAND | MF_CHECKED); + bIsSingleWindow = TRUE; + } + else + { + bIsSingleWindow = FALSE; + CheckMenuItem(hMainMenu, IDM_SWITCHVIEW, MF_BYCOMMAND | MF_UNCHECKED); + + mciVideoWindow.hWnd = MCI_DGV_WINDOW_DEFAULT; + mciError = mciSendCommand(wDeviceId, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD)(LPSTR)&mciVideoWindow); + if (mciError) + { + ShowMCIError(hwnd, mciError); + return; + } + + SetParent(hTrackBar, hwnd); + + MoveWindow(hwnd, PrevWindowPos.left, PrevWindowPos.top, PrevWindowPos.right - PrevWindowPos.left, PrevWindowPos.bottom - PrevWindowPos.top, TRUE); + } +} + static DWORD CloseMciDevice(VOID) { @@ -283,7 +384,7 @@ bIsOpened = TRUE; _tcscpy(szPrevFile, lpFileName); - EnableMenuItems(); + EnableMenuItems(hwnd); return 0; } @@ -295,6 +396,12 @@ { SendMessage(hTrackBar, TBM_SETPOS, (WPARAM) TRUE, (LPARAM) 1); KillTimer(hwnd, IDT_PLAYTIMER); + + if (bIsSingleWindow) + { + SwitchViewMode(hwnd); + } + CloseMciDevice(); } } @@ -477,6 +584,11 @@ return; } + if (bIsOpened) + { + StopPlayback(hwnd); + } + mciError = OpenMciDevice(hwnd, szDeviceName, szLocalFileName); if (mciError != 0) { @@ -598,12 +710,14 @@ { LPRECT pRect = (LPRECT)lParam; - if (pRect->right - pRect->left < MAIN_WINDOW_MIN_WIDTH) - pRect->right = pRect->left + MAIN_WINDOW_MIN_WIDTH; + if (!bIsSingleWindow) + { + if (pRect->right - pRect->left < MAIN_WINDOW_MIN_WIDTH) + pRect->right = pRect->left + MAIN_WINDOW_MIN_WIDTH; - if (pRect->bottom - pRect->top != MAIN_WINDOW_HEIGHT) - pRect->bottom = pRect->top + MAIN_WINDOW_HEIGHT; - + if (pRect->bottom - pRect->top != MAIN_WINDOW_HEIGHT) + pRect->bottom = pRect->top + MAIN_WINDOW_HEIGHT; + } return TRUE; } @@ -611,14 +725,33 @@ { RECT Rect; UINT Size; + RECT ToolbarRect; + MCI_DGV_PUT_PARMS mciPut; if (hToolBar && hTrackBar) { SendMessage(hToolBar, TB_AUTOSIZE, 0, 0); SendMessage(hToolBar, TB_GETITEMRECT, 1, (LPARAM)&Rect); - Size = GetSystemMetrics(SM_CYMENU) + Rect.bottom; - MoveWindow(hTrackBar, 0, 0, LOWORD(lParam), HIWORD(lParam) - Size, TRUE); + if (!bIsSingleWindow) + { + Size = GetSystemMetrics(SM_CYMENU) + Rect.bottom; + MoveWindow(hTrackBar, 0, 0, LOWORD(lParam), HIWORD(lParam) - Size, TRUE); + } + else + { + MoveWindow(hTrackBar, 180, 0, LOWORD(lParam) - 180, 25, TRUE); + + GetClientRect(hwnd, &Rect); + GetClientRect(hToolBar, &ToolbarRect); + + mciPut.rc.top = 0; + mciPut.rc.left = 0; + mciPut.rc.right = Rect.right; + mciPut.rc.bottom = Rect.bottom - (ToolbarRect.bottom - ToolbarRect.top) - 2; + + mciSendCommand(wDeviceId, MCI_PUT, MCI_DGV_PUT_DESTINATION | MCI_DGV_RECT | MCI_WAIT, (DWORD)&mciPut); + } } return 0L; } @@ -640,6 +773,15 @@ } break; + case WM_NCLBUTTONDBLCLK: + { + if (wParam == HTCAPTION) + { + SwitchViewMode(hwnd); + } + } + break; + case WM_COMMAND: switch (LOWORD(wParam)) { @@ -690,6 +832,10 @@ _tcscpy(szPrevFile, _T("\0")); break; + case IDM_SWITCHVIEW: + SwitchViewMode(hwnd); + break; + case IDM_DEVPROPS: ShowDeviceProperties(hwnd); break; Index: base/applications/mplay32/resource.h =================================================================== --- base/applications/mplay32/resource.h (revision 62092) +++ base/applications/mplay32/resource.h (working copy) @@ -37,6 +37,7 @@ #define IDM_ABOUT 1003 #define IDM_VOLUMECTL 1004 #define IDM_DEVPROPS 1005 +#define IDM_SWITCHVIEW 1006 /* ToolBar Icons */ #define TBICON_PLAY 0