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


Интерфейс IAMCopyCaptureFileProgress (strmif.h)

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

Интерфейс IAMCopyCaptureFileProgress — это интерфейс обратного вызова, используемый методом ICaptureGraphBuilder2::CopyCaptureFile.

Так как метод CopyCaptureFile может занять много времени, приложение может реализовать этот интерфейс для получения периодических уведомлений о ходе операции копирования. Если приложению не нужно получать эти сведения, не требуется реализовать интерфейс.

Наследство

Интерфейс IAMCopyCaptureFileProgress наследует от интерфейса IUnknown. IAMCopyCaptureFileProgress также имеет следующие типы элементов:

Методика

Интерфейс IAMCopyCaptureFileProgress имеет эти методы.

 
IAMCopyCaptureFileProgress::P rogress

Метод Progress периодически вызывается методом ICaptureGraphBuilder2::CopyCaptureFile во время копирования файла.

Замечания

Чтобы использовать этот интерфейс, реализуйте класс, наследующий интерфейс и реализующий все его методы, включая методы в IUnknown. В приложении создайте экземпляр класса и передайте его в метод CopyCaptureFile. Вы не должны реализовать подсчет ссылок COM в классе, если объект не будет удален до возврата метода CopyCaptureFile.

В следующем примере показан класс, реализующий интерфейс:

C++
class CProgress : public IAMCopyCaptureFileProgress 
{
public:
    STDMETHODIMP_(ULONG) AddRef() { return 1; }
    STDMETHODIMP_(ULONG) Release() { return 0; }
    STDMETHODIMP QueryInterface(REFIID iid, void **ppv) 
    {
        if  (ppv == NULL) 
        {
            return E_POINTER;
        }
        else if (iid == __uuidof(IUnknown))
        {
            *ppv = static_cast<IUnknown*>(this);
        }
        else if (iid == IID_IAMCopyCaptureFileProgress) 
        {
            *ppv = static_cast<IAMCopyCaptureFileProgress*>(this);
        }
        else
        {
            return E_NOINTERFACE;
        }
        return S_OK;
    }
    STDMETHODIMP Progress(int iPercent) 
    {
        if (iPercent < 0 || iPercent > 100) 
        {
            return E_INVALIDARG;
        }

        TCHAR szMsg[32];
        StringCchPrintf(szMsg, 32, TEXT("Progress: %d%%"), iPercent);
        // Assume g_hwndStatus is a valid HWND.
        SetWindowText(g_hwndStatus, szMsg);  

        return S_OK;
    };
};
В следующем примере этот класс используется в методе CopyCaptureFile:
C++
Область для объекта CProgress { CProgress Prog; // Предположим, pBuilder является инициализированным указателем ICaptureGraphBuilder2.
    hr = pBuilder->CopyCaptureFile(szCaptureFile, szDestFile, TRUE, static_cast 

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка strmif.h (include Dshow.h)

См. также

Интерфейсы