DirectShow DirectShow 레퍼런스 인터페이스 IAMCopyCaptureFileProgress   [목차열람] [주소복사] [슬롯비우기]
IAMCopyCaptureFileProgress 인터페이스
 
Microsoft DirectX 9.0

IAMCopyCaptureFileProgress 인터페이스

IAMCopyCaptureFileProgress 은,ICaptureGraphBuilder2::CopyCaptureFile 메서드가 사용하는 콜백 인터페이스이다.

CopyCaptureFile 메서드의 완료에는 긴 시간이 걸리는 경우가 있기 (위해)때문에, 애플리케이션은 이 인터페이스를 처리 해, 복사 작업의 진행 상황에 대해 정기적으로 통지를 받을 수가 있다. 애플리케이션이 이러한 정보를 필요로 하지 않는 경우는, 이 인터페이스를 처리 할 필요는 없다.

IAMCopyCaptureFileProgress 인터페이스는,IUnknown 로부터 계승되는 메서드에 가세해 이하의 메서드를 공개한다.

메서드 설명
Progress 캡춰 조작중에,ICaptureGraphBuilder2::CopyCaptureFile 메서드가 정기적으로 호출한다.

주의

이 인터페이스를 사용하려면 , 인터페이스를 계승하는 클래스,IUnknown 의 메서드를 포함해 그 클래스의 모든 메서드를 처리 한다. 애플리케이션내에서 클래스의 인스턴스를 생성 해,CopyCaptureFile 메서드에 건네준다. CopyCaptureFile 메서드가 돌려주어질 때까지 개체가 삭제되지 않는 것이 보증되고 있는 경우는, 클래스에 COM 참조 카운트를 처리 할 필요는 없다.

이하의 샘플 코드는, 인터페이스를 처리 하는 클래스를 나타내고 있다.

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;
        if (iid == __uuidof(IUnknown))
        {
            *ppv = static_cast<IUnknown*>(this);
            return S_OK;
        }
        if (iid == IID_IAMCopyCaptureFileProgress) 
        {
            *ppv = static_cast<IAMCopyCaptureFileProgress*>(this);
            return S_OK;
        }
        return E_NOINTERFACE;
        }
    }
    STDMETHODIMP Progress(int iPercent) 
    {
        if (i < 0 || i > 100) return E_INVALIDARG;
        TCHAR szMsg[32];
        wsprintf(szMsg, TEXT("Progress: %d%%"), i);
        // g_hwndStatus 는 유효한 HWND 인 것으로 한다.
        SetWindowText(g_hwndStatus, szMsg);  
        return S_OK;
    };
};

이하의 샘플에서는, 이 클래스를 CopyCaptureFile 메서드내에서 사용하고 있다.

// CProgress 개체의 범위
{
    CProgress Prog;
    // pBuilder 는 초기화된 ICaptureGraphBuilder2 포인터인 것으로 한다.
    hr = pBuilder->CopyCaptureFile(szCaptureFile, szDestFile, TRUE,
        static_cast<IAMCopyCaptureFileProgress*>(&Prog));
}
↑TOP