1단계: Windows Framework 만들기

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

[이 API는 지원되지 않으며 나중에 변경되거나 사용할 수 없습니다.]

먼저 WinMain 및 창 프로시저를 포함하여 Windows 애플리케이션의 기본 프레임워크를 만듭니다. WinMain 함수는 여기에 표시되지 않습니다. 은 메시지 루프 전에 CoInitialize 를 호출하여 COM 라이브러리를 초기화하고 메시지 루프가 종료된 후 CoUninitialize 를 호출합니다. 다음 최소 창 프로시저로 시작합니다.

LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    static BITMAPINFOHEADER *pbmi = NULL;
    static BYTE *pBuffer = NULL;
    switch (msg)
    {
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        if (pbmi) delete [] pbmi;
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, msg, wparam, lparam);
    }
    return 0;
}

Media Detector에서 포스터 프레임을 검색하면 BITMAPINFOHEADER 구조와 이미지 비트가 포함된 버퍼가 반환됩니다. 따라서 창 프로시저에서 두 개의 정적 변수를 정의합니다. pbmiBITMAPINFOHEADER 구조체에 대한 포인터를 보유하고 pBuffer 는 비트맵에 대한 포인터를 보유합니다. 애플리케이션은 를 사용하여 pbmi 에서 버퍼를 new할당하므로 창이 제거되기 전에 버퍼를 삭제해야 합니다. pBuffer 포인터는 pbmi의 오프셋으로 계산되므로 삭제할 필요가 없습니다.

다음: 2단계: 포스터 프레임을 잡기 위한 메뉴 명령 추가

포스터 프레임 잡기