Beispiel: Das Dialogfeld "Öffnen"

Das Shapes Beispiel, das wir verwendet haben, ist etwas erfunden. Wenden Wir uns an ein COM-Objekt, das Sie möglicherweise in einem echten Windows-Programm verwenden können: das Dialogfeld Öffnen .

Screenshot des Dialogfelds

Um das Dialogfeld Öffnen anzuzeigen, kann ein Programm ein COM-Objekt verwenden, das als Common Item Dialog-Objekt bezeichnet wird. Das Dialogfeld für allgemeine Elemente implementiert eine Schnittstelle mit dem Namen IFileOpenDialog, die in der Headerdatei Shobjidl.h deklariert wird.

Hier sehen Sie ein Programm, das dem Benutzer das Dialogfeld Öffnen anzeigt. Wenn der Benutzer eine Datei auswählt, zeigt das Programm ein Dialogfeld an, das den Dateinamen enthält.

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

Dieser Code verwendet einige Konzepte, die später im Modul beschrieben werden. Machen Sie sich also keine Sorgen, wenn Sie hier nicht alles verstehen. Hier ist eine grundlegende Gliederung des Codes:

  1. Rufen Sie CoInitializeEx auf, um die COM-Bibliothek zu initialisieren.
  2. Rufen Sie CoCreateInstance auf, um das Common Item Dialog-Objekt zu erstellen und einen Zeiger auf die IFileOpenDialog-Schnittstelle des Objekts abzurufen.
  3. Rufen Sie die Show-Methode des Objekts auf, die dem Benutzer das Dialogfeld anzeigt. Diese Methode blockiert, bis der Benutzer das Dialogfeld schließt.
  4. Rufen Sie die GetResult-Methode des Objekts auf. Diese Methode gibt einen Zeiger auf ein zweites COM-Objekt zurück, das als Shellelementobjekt bezeichnet wird. Das Shellelement, das die IShellItem-Schnittstelle implementiert, stellt die datei dar, die der Benutzer ausgewählt hat.
  5. Rufen Sie die GetDisplayName-Methode des Shellelements auf. Diese Methode ruft den Dateipfad in Form einer Zeichenfolge ab.
  6. Zeigt ein Meldungsfeld an, in dem der Dateipfad angezeigt wird.
  7. Rufen Sie CoUninitialize auf, um die COM-Bibliothek zu initialisieren.

Die Schritte 1, 2 und 7 rufen Funktionen auf, die von der COM-Bibliothek definiert werden. Hierbei handelt es sich um generische COM-Funktionen. In den Schritten 3 bis 5 werden Methoden aufgerufen, die vom Common Item Dialog-Objekt definiert werden.

In diesem Beispiel werden beide Arten der Objekterstellung gezeigt: Die generische CoCreateInstance-Funktion und eine Methode (GetResult), die für das Common Item Dialog-Objekt spezifisch ist.

Nächste

Verwalten der Lebensdauer eines Objekts

Dialogfeld "Öffnen" (Beispiel)