Exemple : Boîte de dialogue Ouvrir

L’exemple Shapes que nous avons utilisé est quelque peu artificiel. Passons à un objet COM que vous pouvez utiliser dans un programme Windows réel : la boîte de dialogue Ouvrir .

capture d’écran montrant la boîte de dialogue ouverte

Pour afficher la boîte de dialogue Ouvrir , un programme peut utiliser un objet COM appelé objet Common Item Dialog. La boîte de dialogue Élément commun implémente une interface nommée IFileOpenDialog, qui est déclarée dans le fichier d’en-tête Shobjidl.h.

Voici un programme qui affiche la boîte de dialogue Ouvrir à l’utilisateur. Si l’utilisateur sélectionne un fichier, le programme affiche une boîte de dialogue qui contient le nom de fichier.

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

Ce code utilise certains concepts qui seront décrits plus loin dans le module. Par conséquent, ne vous inquiétez pas si vous ne comprenez pas tout ici. Voici un plan de base du code :

  1. Appelez CoInitializeEx pour initialiser la bibliothèque COM.
  2. Appelez CoCreateInstance pour créer l’objet Common Item Dialog et obtenir un pointeur vers l’interface IFileOpenDialog de l’objet.
  3. Appelez la méthode Show de l’objet, qui affiche la boîte de dialogue à l’utilisateur. Cette méthode se bloque jusqu’à ce que l’utilisateur ferme la boîte de dialogue.
  4. Appelez la méthode GetResult de l’objet. Cette méthode retourne un pointeur vers un deuxième objet COM, appelé objet d’élément Shell . L’élément Shell, qui implémente l’interface IShellItem , représente le fichier sélectionné par l’utilisateur.
  5. Appelez la méthode GetDisplayName de l’élément Shell. Cette méthode obtient le chemin du fichier, sous la forme d’une chaîne.
  6. Afficher une boîte de message qui affiche le chemin du fichier.
  7. Appelez CoUninitialize pour annuler l’initialisation de la bibliothèque COM.

Les étapes 1, 2 et 7 appellent des fonctions définies par la bibliothèque COM. Il s’agit de fonctions COM génériques. Les étapes 3 à 5 appellent des méthodes définies par l’objet Common Item Dialog.

Cet exemple montre les deux variétés de création d’objets : la fonction générique CoCreateInstance et une méthode (GetResult) spécifique à l’objet Common Item Dialog.

Suivant

Gestion de la durée de vie d’un objet

Ouvrir un exemple de boîte de dialogue