Beispiel: Das Dialogfeld "Öffnen"
Das Shapes
Beispiel, das wir verwendet haben, ist etwas konriviert. Lassen Sie uns ein COM-Objekt aufrufen, das Sie in einem echten Windows-Programm verwenden können: das Dialogfeld Öffnen.
Um das Dialogfeld Öffnen anzuzeigen, kann ein Programm ein COM-Objekt verwenden, das als Common Item Dialog-Objekt bezeichnet wird. Das Dialogfeld "Allgemeines Element" implementiert eine Schnittstelle namens IFileOpenDialog, die in der Headerdatei Shobjidl.h deklariert wird.
Hier ist ein Programm, das dem Benutzer das Dialogfeld "Öffnen" anzeigt. Wenn der Benutzer eine Datei auswählt, wird im Programm ein Dialogfeld mit dem Dateinamen angezeigt.
#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:
- Rufen Sie CoInitializeEx- auf, um die COM-Bibliothek zu initialisieren.
- Rufen Sie CoCreateInstance- auf, um das Common Item Dialog-Objekt zu erstellen, und rufen Sie einen Zeiger auf die IFileOpenDialog Schnittstelle des Objekts ab.
- Rufen Sie die Show-Methode des Objekts auf, die dem Benutzer das Dialogfeld anzeigt. Diese Methode blockiert, bis der Benutzer das Dialogfeld schließt.
- Rufen Sie die GetResult-Methode des Objekts auf. Diese Methode gibt einen Zeiger auf ein zweites COM-Objekt zurück, das als Shell-Element-Objekt bezeichnet wird. Das Shell-Element, das die IShellItem--Schnittstelle implementiert, stellt die Datei dar, die der Benutzer ausgewählt hat.
- Rufen Sie die GetDisplayName-Methode des Shellelements auf. Diese Methode ruft den Dateipfad in Form einer Zeichenfolge ab.
- Anzeigen eines Meldungsfelds, in dem der Dateipfad angezeigt wird.
- 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. Dies sind generische COM-Funktionen. Schritte 3 bis 5 Aufrufmethoden, die vom Common Item Dialog-Objekt definiert werden.
Dieses Beispiel zeigt beide Arten der Objekterstellung: Die generische CoCreateInstance-Funktion und eine Methode (GetResult), die spezifisch für das Common Item Dialog -Objekt ist.
Nächster
Verwalten der Lebensdauer eines Objekts
Verwandte Themen