Etapa 2: Adicionar um comando de menu para pegar um quadro de pôster

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

[Essa API não tem suporte e pode ser alterada ou indisponível no futuro.]

Este tópico é a Etapa 2 de Agarrando um Quadro de Pôsteres.

Em seguida, adicione um comando para que o usuário pegue um quadro de pôster de um arquivo. Crie um item de menu com uma ID de recurso de IDM_BITMAP e adicione a seguinte instrução case ao procedimento de janela:

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

A função DoShowBitmap retornará o buffer alocado no pbmi. Supondo que a função seja bem-sucedida, o endereço do bitmap (

pBuffer

) pode ser calculado como um deslocamento de pbmi. Na função DoShowBitmap, exiba uma caixa de diálogo Abrir Arquivo para o usuário escolher um arquivo e chame a função GetBitmap definida pelo aplicativo, que recuperará o bitmap:

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);
}

Próximo: Etapa 3: Implementar a função Frame-Grabbing

Pegando um quadro de pôster