Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
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:
- Anropa CoInitializeEx för att initiera COM-biblioteket.
- Anropa CoCreateInstance för att skapa objektet Common Item Dialog och hämta en pekare till objektets IFileOpenDialog-gränssnitt.
- Anropa objektets Visa-metod, som visar dialogrutan för användaren. Den här metoden blockeras tills användaren stänger dialogrutan.
- 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.
- Anropa shell-objektets metod GetDisplayName. Den här metoden hämtar filsökvägen i form av en sträng.
- Visa en meddelanderuta som visar filsökvägen.
- 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
Relaterade ämnen