Esempio: finestra di dialogo Apri
L'esempio Shapes
usato è un po' contrived. Passiamo a un oggetto COM che potresti usare in un programma Windows reale: la finestra di dialogo Apri .
Per visualizzare la finestra di dialogo Apri , un programma può utilizzare un oggetto COM denominato l'oggetto Common Item Dialog. La finestra di dialogo Elemento comune implementa un'interfaccia denominata IFileOpenDialog, dichiarata nel file di intestazione Shobjidl.h.
Ecco un programma che visualizza la finestra di dialogo Apri all'utente. Se l'utente seleziona un file, il programma visualizza una finestra di dialogo contenente il nome del file.
#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;
}
Questo codice usa alcuni concetti che verranno descritti più avanti nel modulo, quindi non preoccuparti se non si comprende tutto qui. Ecco una struttura di base del codice:
- Chiamare CoInitializeEx per inizializzare la libreria COM.
- Chiamare CoCreateInstance per creare l'oggetto Common Item Dialog e ottenere un puntatore all'interfaccia IFileOpenDialog dell'oggetto.
- Chiamare il metodo Show dell'oggetto, che mostra la finestra di dialogo all'utente. Questo metodo si blocca fino a quando l'utente non chiude la finestra di dialogo.
- Chiamare il metodo GetResult dell'oggetto. Questo metodo restituisce un puntatore a un secondo oggetto COM, denominato oggetto elemento shell . L'elemento Shell, che implementa l'interfaccia IShellItem , rappresenta il file selezionato dall'utente.
- Chiamare il metodo GetDisplayName dell'elemento shell. Questo metodo ottiene il percorso del file, sotto forma di stringa.
- Visualizzare una finestra di messaggio che visualizza il percorso del file.
- Chiamare CoUninitialize per inizializzare la libreria COM.
I passaggi 1, 2 e 7 chiamano le funzioni definite dalla libreria COM. Si tratta di funzioni COM generiche. I passaggi da 3 a 5 chiamano i metodi definiti dall'oggetto Common Item Dialog.
In questo esempio vengono illustrate entrambe le varietà di creazione di oggetti: la funzione CoCreateInstance generica e un metodo (GetResult) specifico dell'oggetto Common Item Dialog.
Prossima
Gestione della durata di un oggetto
Argomenti correlati