DirectShow DirectShow 튜토리얼 포스터 프레임의 포착 순서 2: 포스터 프레임을 포착하는 메뉴 커멘드를 추가한다   [목차열람] [주소복사] [슬롯비우기]
순서 2: 포스터 프레임을 포착하는 메뉴 커멘드를 추가한다
 
Microsoft DirectX 9.0

순서 2: 포스터 프레임을 포착하는 메뉴 커멘드를 추가한다

다음에, 사용자가 파일로부터 포스터 프레임을 포착하기 위한 커멘드를 추가한다. 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);
}
↑TOP