Dela via


Exempel: Dialogrutan Öppna

Det Shapes exempel som vi har använt är något intrikat. Nu ska vi gå till ett COM-objekt som du kan använda i ett riktigt Windows-program: dialogrutan Öppna.

skärmbild som visar dialogrutan öppna

Om du vill visa dialogrutan Öppna kan ett program använda ett COM-objekt med namnet Common Item Dialog-objektet. Dialogrutan Common Item implementerar ett gränssnitt med namnet IFileOpenDialog, som deklareras i huvudfilen Shobjidl.h.

Här är ett program som visar dialogrutan Öppna för användaren. Om användaren väljer en fil visar programmet en dialogruta som innehåller filnamnet.

#include <windows.h>
#include <shobjidl.h> 

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
    HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
        COINIT_DISABLE_OLE1DDE);
    if (SUCCEEDED(hr))
    {
        IFileOpenDialog *pFileOpen;

        // Create the FileOpenDialog object.
        hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, 
                IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));

        if (SUCCEEDED(hr))
        {
            // Show the Open dialog box.
            hr = pFileOpen->Show(NULL);

            // Get the file name from the dialog box.
            if (SUCCEEDED(hr))
            {
                IShellItem *pItem;
                hr = pFileOpen->GetResult(&pItem);
                if (SUCCEEDED(hr))
                {
                    PWSTR pszFilePath;
                    hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);

                    // Display the file name to the user.
                    if (SUCCEEDED(hr))
                    {
                        MessageBoxW(NULL, pszFilePath, L"File Path", MB_OK);
                        CoTaskMemFree(pszFilePath);
                    }
                    pItem->Release();
                }
            }
            pFileOpen->Release();
        }
        CoUninitialize();
    }
    return 0;
}

Den här koden använder vissa begrepp som beskrivs senare i modulen, så oroa dig inte om du inte förstår allt här. Här är en grundläggande beskrivning av koden:

  1. Anropa CoInitializeEx för att initiera COM-biblioteket.
  2. Anropa CoCreateInstance för att skapa objektet Common Item Dialog och hämta en pekare till objektets IFileOpenDialog-gränssnitt.
  3. Anropa objektets Visa-metod, som visar dialogrutan för användaren. Den här metoden blockeras tills användaren stänger dialogrutan.
  4. Anropa objektets GetResult--metod. Den här metoden returnerar en pekare till ett andra COM-objekt, kallat ett Shell-objekt objekt. Shell-objektet, som implementerar gränssnittet IShellItem, representerar filen som användaren valde.
  5. Anropa shell-objektets metod GetDisplayName. Den här metoden hämtar filsökvägen i form av en sträng.
  6. Visa en meddelanderuta som visar filsökvägen.
  7. Anropa CoUninitialize för att eninitiera COM-biblioteket.

Steg 1, 2 och 7 anropar funktioner som definieras av COM-biblioteket. Det här är generiska COM-funktioner. Steg 3–5 anropar metoder som definieras av objektet Common Item Dialog.

Det här exemplet visar båda typerna av objektskapande: Den generiska funktionen CoCreateInstance och en metod (GetResult) som är specifik för objektet Common Item Dialog.

Nästa

Hantera livslängden för ett objekt

Dialogrutan Öppna exempel på