Steg 1: Skapa Windows Framework

[Funktionen som är associerad med den här sidan, DirectShow, är en äldre funktion. Det har ersatts av MediaPlayer, IMFMediaEngineoch Audio / Video Capture i Media Foundation. Dessa funktioner har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer, IMFMediaEngine och Audio/Video Capture i Media Foundation i stället för DirectShow, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]

[Det här API:et stöds inte och kan ändras eller vara otillgängligt i framtiden.]

Börja med att skapa det grundläggande ramverket för ett Windows-program, inklusive WinMain och en fönsterprocedur. Funktionen WinMain visas inte här. anropa CoInitialize innan meddelandeloopen för att initiera COM-biblioteket och CoUninitialize när meddelandeloopen har avslutats. Börja med följande minimala fönsterprocedur:

LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    static BITMAPINFOHEADER *pbmi = NULL;
    static BYTE *pBuffer = NULL;
    switch (msg)
    {
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        if (pbmi) delete [] pbmi;
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, msg, wparam, lparam);
    }
    return 0;
}

När du hämtar en stillbild från mediedetektorn returneras en buffert som innehåller en BITMAPINFOHEADER-struktur följt av bilddata. Definiera därför två statiska variabler i fönsterproceduren: pbmi håller en pekare mot BITMAPINFOHEADER struktur, och pBuffer kommer att hålla en pekare till bitmappen. Programmet allokerar bufferten i pbmi- med hjälp av new, så den måste ta bort bufferten innan fönstret förstörs. Pekaren pBuffer beräknas som en förskjutning från pbmi-, så du behöver inte ta bort den.

Nästa: steg 2: Lägg till ett menykommando för att hämta en affischram

Gripa en affischram