Beispiel: Das Dialogfeld „Öffnen“

Beispiel: Das Dialogfeld „Öffnen“

Das verwendete Shapes-Beispiel ist in gewissem Maße gestellt. Wenden wir uns nun einem COM-Objekt zu, das Sie eventuell in einem realen Windows-Programm verwenden können: Das Dialogfeld Öffnen.

Dieser Screenshot zeigt das Dialogfeld „Öffnen“ an.

Um das Dialogfeld Öffnen anzuzeigen, kann ein Programm ein COM-Objekt verwenden, das als Objekt zum Dialogfeld der gemeinsamen Elemente bezeichnet wird. Das Dialogfeld der gemeinsamen Elemente implementiert eine Schnittstelle namens IFileOpenDialog, die in der Headerdatei Shobjidl.h deklariert wird.

Dieses Programm zeigt dem Benutzer das Dialogfeld Öffnen an. 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))
                    {
                        MessageBox(NULL, pszFilePath, L"File Path", MB_OK);
                        CoTaskMemFree(pszFilePath);
                    }
                    pItem->Release();
                }
            }
            pFileOpen->Release();
        }
        CoUninitialize();
    }
    return 0;
}


In diesem Code werden Konzepte verwendet, die im Verlauf des Moduls näher beschrieben werden. Sie müssen deshalb an dieser Stelle noch nicht alles verstehen. Hier finden Sie eine grundlegende Übersicht des Codes:

  1. Rufen Sie CoInitializeEx auf, um die COM-Bibliothek zu initialisieren.
  2. Rufen Sie CoCreateInstance auf, um das Objekt zum Dialogfeld der gemeinsamen Elemente zu erstellen. Rufen Sie außerdem einen Zeiger auf die IFileOpenDialog-Schnittstelle des Objekts ab.
  3. Rufen Sie die Show-Methode des Objekts auf, die dem Benutzer das Dialogfeld anzeigt. Diese Methode wird 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 Shell Item-Objekt bezeichnet wird. Das Shellelement, das die IShellItem-Schnittstelle implementiert, stellt die vom Benutzer gewählte Datei dar.
  5. Rufen Sie die GetDisplayName-Methode des Shellelements auf. Diese Methode ruft den Dateipfad in Form einer Zeichenfolge ab.
  6. Hier wird ein Meldungsfeld angegeben, das den Dateipfad anzeigt.
  7. Rufen Sie CoUninitialize auf, um die COM-Bibliothek zu entinitialisieren.

Die Schritte 1, 2 und 7 rufen Funktionen auf, die von der COM-Bibliothek definiert werden. Dieses sind generische COM-Funktionen. Die Schritte 3–5 rufen Methoden auf, die vom Objekt zum Dialogfeld für die gemeinsamen Elemente definiert werden.

In diesem Beispiel werden die beiden Varianten der Objekterstellung veranschaulicht: Die generische CoCreateInstance-Funktion und eine Methode (GetResult) sind speziell auf das Objekt zum Dialogfeld der gemeinsamen Elemente ausgerichtet.

Weiter

Verwalten der Lebensdauer eines Objekts

Verwandte Themen

Beispiel zum Dialogfeld „Öffnen“

 

 

Anzeigen:
© 2016 Microsoft