Delen via


Voorbeeld: het dialoogvenster Openen

Het Shapes voorbeeld dat we hebben gebruikt, is enigszins misleid. We gaan naar een COM-object dat u in een echt Windows-programma kunt gebruiken: het dialoogvenster Openen.

schermafbeelding met het geopende dialoogvenster

Als u het dialoogvenster Openen wilt weergeven, kan een programma een COM-object met de naam Common Item Dialog-object gebruiken. Het dialoogvenster Algemeen item implementeert een interface met de naam IFileOpenDialog, die wordt gedeclareerd in het headerbestand Shobjidl.h.

Hier volgt een programma waarin het dialoogvenster Openen voor de gebruiker wordt weergegeven. Als de gebruiker een bestand selecteert, wordt in het programma een dialoogvenster met de bestandsnaam weergegeven.

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

Deze code maakt gebruik van enkele concepten die verderop in de module worden beschreven. Maak u dus geen zorgen als u hier niet alles begrijpt. Hier volgt een basisoverzicht van de code:

  1. Roep CoInitializeEx aan om de COM-bibliotheek te initialiseren.
  2. Roep CoCreateInstance- aan om het dialoogvenster Algemene items te maken en een aanwijzer op te halen naar de interface van het object IFileOpenDialog.
  3. Roep de methode van het object aan, waarin het dialoogvenster aan de gebruiker wordt weergegeven. Deze methode wordt geblokkeerd totdat de gebruiker het dialoogvenster sluit.
  4. Roep de methode GetResult van het object aan. Met deze methode wordt een aanwijzer geretourneerd naar een tweede COM-object, een Shell-item-object genoemd. Het Shell-item, dat de IShellItem interface implementeert, vertegenwoordigt het bestand dat de gebruiker heeft geselecteerd.
  5. Roep de methode GetDisplayName van het Shell-item aan. Met deze methode wordt het bestandspad opgeslagen in de vorm van een tekenreeks.
  6. Een berichtvak weergeven waarin het bestandspad wordt weergegeven.
  7. Roep CoUninitialize- aan om de COM-bibliotheek te uninitialiseren.

Stappen 1, 2 en 7 roepen functies aan die zijn gedefinieerd door de COM-bibliotheek. Dit zijn algemene COM-functies. Stap 3-5: methoden voor aanroepen die zijn gedefinieerd door het dialoogvenster Common Item.

In dit voorbeeld ziet u beide varianten van het maken van objecten: de algemene CoCreateInstance-functie en een methode (GetResult) die specifiek is voor het dialoogvenster Common Item.

Volgend

de levensduur van een object beheren

Dialoogvenstervoorbeeld openen