限制播放范围

[与此页面关联的功能 MCIWnd Window 类是一项旧功能。 它已被 MediaPlayer 取代。 MediaPlayer 已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer 而不是 MCIWnd Window 类。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

控制播放从 MCIWndPlay 宏开始,该宏从当前播放位置到内容末尾播放与 MCIWnd 窗口关联的内容或文件。 如果要将播放限制为内容或文件的特定部分,可以从其他播放 MCIWnd 宏中进行选择: MCIWndPlayFromMCIWndPlayToMCIWndPlayFromTo

还需要设置适当的时间格式。 时间格式确定内容是以帧、毫秒、轨道还是以其他一些单位表示。

以下示例创建一个 MCIWnd 窗口,并提供用于播放内容的最后三分之一、第一个三分之一或中间三分之一的菜单命令。 这些菜单命令使用 MCIWndPlayFromMCIWndPlayToMCIWndPlayFromTo 来播放内容段。 该示例还使用 MCIWndGetStartMCIWndGetEnd 宏来标识内容的开头和结尾,并使用 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. 
    }