Partager via


Exemple : Boîte de dialogue Ouvrir

L’exemple Shapes que nous avons utilisé est un peu contrif. Tournons vers 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é l’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 du 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. Ne vous inquiétez donc 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 ignore 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é 'élément Shell objet. 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 d’accès au fichier, sous la forme d’une chaîne.
  6. Afficher une boîte de message qui affiche le chemin d’accès au fichier.
  7. Appelez CoUninitialize pour annuler l’initialisation de la bibliothèque COM.

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

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

Prochain

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

Boîte de dialogue Ouvrir l’exemple de