Freigeben über


Schritt 2: Hinzufügen eines Menübefehls zum Greifen eines Posterrahmens

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]

Dieses Thema ist Schritt 2 des Greifens eines Posterrahmens.

Fügen Sie als Nächstes einen Befehl hinzu, damit der Benutzer einen Posterrahmen aus einer Datei abrufen kann. Erstellen Sie ein Menüelement mit der Ressourcen-ID IDM_BITMAP, und fügen Sie der Fensterprozedur die folgende Fallanweisungen hinzu:

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

Die DoShowBitmap-Funktion gibt den zugeordneten Puffer in pbmi zurück. Wenn die Funktion erfolgreich ist, wird die Adresse der Bitmap (

pBuffer

) kann als Offset von pbmi berechnet werden. Zeigen Sie in der DoShowBitmap-Funktion ein Dialogfeld Datei öffnen an, in dem der Benutzer eine Datei auswählen kann, und rufen Sie dann die anwendungsdefinierte GetBitmap-Funktion auf, die die Bitmap abruft:

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

Weiter: Schritt 3: Implementieren der Frame-Grabbing-Funktion

Greifen eines Posterrahmens