Поделиться через


Ограничение области воспроизведения

[Функция, связанная с этой страницей, MCIWnd Window Class, является устаревшей функцией. Он был заменен MediaPlayer. MediaPlayer оптимизирован для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует по возможности использовать MediaPlayer вместо класса MCIWnd Window. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Управление воспроизведением начинается с макроса MCIWndPlay , который воспроизводит содержимое или файл, связанные с окном MCIWnd, от текущей позиции воспроизведения до конца содержимого. Если вы хотите ограничить воспроизведение определенной частью содержимого или файла, можно выбрать один из других макросов воспроизведения MCIWnd: MCIWndPlayFrom, MCIWndPlayTo и MCIWndPlayFromTo.

Кроме того, необходимо задать соответствующий формат времени. Формат времени определяет, измеряется ли содержимое в кадрах, миллисекундах, дорожках или других единицах.

В следующем примере создается окно MCIWnd и предоставляются команды меню для воспроизведения последней трети, первой трети или средней трети содержимого. Эти команды меню используют MCIWndPlayFrom, MCIWndPlayTo и MCIWndPlayFromTo для воспроизведения сегментов содержимого. В примере также используются макросы MCIWndGetStart и MCIWndGetEnd для определения начала и конца содержимого, а макрос MCIWndHome используется для перемещения позиции воспроизведения в начало содержимого.

Функция MCIWndCreate использует стили WS_CAPTION и MCIWNDF_SHOWALL в дополнение к стандартным стилям окна для отображения имени файла, режима и текущей позиции воспроизведения в заголовке окна MCIWnd.

case WM_COMMAND: 
    switch (wParam) 
    { 
        case IDM_CREATEMCIWND: 
            g_hwndMCIWnd = MCIWndCreate(hwnd, 
                g_hinst, 
                WS_CHILD | WS_VISIBLE | WS_CAPTION | 
                MCIWNDF_SHOWALL, 
                "sample.avi"); 
            break;
        case IDM_PLAYFROM:                // plays last third of clip 
            MCIWndUseTime(g_hwndMCIWnd);  // millisecond format 
 
        // Get media start and end positions. 
            lStart = MCIWndGetStart(g_hwndMCIWnd); 
            lEnd = MCIWndGetEnd(g_hwndMCIWnd); 
 
        // Determine playback end position. 
            lPlayStart = 2 * (lEnd - lStart) / 3 + lStart; 
 
            MCIWndPlayFrom(g_hwndMCIWnd, lPlayStart); 
            break; 
        case IDM_PLAYTO:                  // plays first third of clip 
            MCIWndUseTime(g_hwndMCIWnd);  // millisecond format 
 
        // Get media start and end positions. 
            lStart = MCIWndGetStart(g_hwndMCIWnd); 
            lEnd = MCIWndGetEnd(g_hwndMCIWnd); 
 
        // Determine playback start position. 
            lPlayEnd = (lEnd - lStart) / 3 + lStart;
 
            MCIWndHome(g_hwndMCIWnd); 
            MCIWndPlayTo(g_hwndMCIWnd, lPlayEnd); 
            break; 
        case IDM_PLAYSOME:               // plays middle third of clip 
            MCIWndUseTime(g_hwndMCIWnd); // millisecond format 
 
        // Get media start and end positions. 
            lStart = MCIWndGetStart(g_hwndMCIWnd); 
            lEnd = MCIWndGetEnd(g_hwndMCIWnd); 
 
        // Determine playback start and end positions. 
            lPlayStart = (lEnd - lStart) / 3 + lStart;
            lPlayEnd = 2 * (lEnd - lStart) / 3 + lStart; 
 
            MCIWndPlayFromTo(g_hwndMCIWnd, lPlayStart, lPlayEnd); 
            break; 
    
    // Handle other commands here. 
    }