2단계: 포스터 프레임을 잡기 위한 메뉴 명령 추가
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
[이 API는 지원되지 않으며 나중에 변경되거나 사용할 수 없습니다.]
이 항목은 포스터 프레임 잡기의 2단계입니다.
다음으로, 사용자가 파일에서 포스터 프레임을 잡을 수 있는 명령을 추가합니다. 리소스 ID가 IDM_BITMAP 메뉴 항목을 만들고 창 프로시저에 다음 사례 문을 추가합니다.
case WM_COMMAND:
switch (LOWORD(wparam))
{
case IDM_BITMAP:
{
HRESULT hr = DoShowBitmap(hwnd, &pbmi);
if (SUCCEEDED(hr))
{
pBuffer = reinterpret_cast<BYTE*>(pbmi) +
sizeof(BITMAPINFOHEADER);
InvalidateRect(hwnd, NULL, TRUE);
}
else
{
MessageBox(hwnd, TEXT("Cannot display the image."),
TEXT("Error"), MB_OK | MB_ICONERROR);
}
}
break; // IDM_BITMAP
}
break; // WM_COMMAND
DoShowBitmap 함수는 pbmi에서 할당된 버퍼를 반환합니다. 함수가 성공한다고 가정하면 비트맵의 주소(
pBuffer
)은 pbmi의 오프셋으로 계산할 수 있습니다. DoShowBitmap 함수에서 사용자가 파일을 선택할 수 있도록 파일 열기 대화 상자를 표시한 다음, 애플리케이션 정의 GetBitmap 함수를 호출하여 비트맵을 검색합니다.
HRESULT DoShowBitmap(HWND hwnd, BITMAPINFOHEADER** ppbmih)
{
OPENFILENAME ofn; // common dialog box structure
// Initialize OPENFILENAME (not shown).
// Display the Open File dialog box.
if (GetOpenFileName(&ofn) != TRUE) // failed to open file
{
return E_FAIL;
}
return GetBitmap(ofn.lpstrFile, ppbmih);
}
관련 항목