DirectShow DirectShow 튜토리얼 포스터 프레임의 포착 순서 2: 포스터 프레임을 포착하는 메뉴 커멘드를 추가한다 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
다음에, 사용자가 파일로부터 포스터 프레임을 포착하기 위한 커멘드를 추가한다. IDM_BITMAP 의 리소스 ID 로 메뉴 항목을 생성 해, 이하의 case 스테이트먼트를 윈도우 프로시저에 추가한다.
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 로부터의 오프셋(offset)로서 계산할 수 있다. DoShowBitmap 함수에서는, 사용자가 파일을 선택하기 위한 [파일을 여는] 다이알로그 박스를 표시해, 애플리케이션 정의의 GetBitmap 함수를 호출해 비트 맵을 얻어온다.
HRESULT DoShowBitmap(HWND hwnd, BITMAPINFOHEADER** ppbmih)
{
OPENFILENAME ofn; // common dialog 박스 구조체.
// OPENFILENAME 를 초기화한다 (생략).
// [파일을 여는] 다이알로그 박스를 표시한다.
if (GetOpenFileName(&ofn) != TRUE) // 파일을 열지 않았다.
{
return E_FAIL;
}
return GetBitmap(ofn.lpstrFile, ppbmih);
}