Sdílet prostřednictvím


Příklad: Dialogové okno Otevřít

Shapes příklad, který jsme používali, je poněkud kontrakce. Pojďme se obrátit na objekt COM, který můžete použít v reálném programu systému Windows: dialogové okno Otevřít.

snímek obrazovky s otevřeným dialogovým oknem

Chcete-li zobrazit dialogové okno Otevřít, může program použít objekt COM s názvem Common Item Dialog objekt. Dialogové okno Společné položky implementuje rozhraní s názvem IFileOpenDialog, který je deklarován v souboru hlavičky Shobjidl.h.

Tady je program, který uživateli zobrazí dialogové okno Otevřít. Pokud uživatel vybere soubor, program zobrazí dialogové okno obsahující název souboru.

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

Tento kód používá některé koncepty, které budou popsány dále v tomto modulu, takže se nemusíte obávat, pokud tady nerozumíte všemu. Tady je základní osnova kódu:

  1. Volání CoInitializeEx inicializace knihovny COM.
  2. Volání CoCreateInstance vytvoření objektu Common Item Dialog a získání ukazatele na IFileOpenDialog rozhraní.
  3. Volání objektu Zobrazit metodu, která zobrazuje dialogové okno pro uživatele. Tato metoda blokuje, dokud uživatel dialogové okno nespustí.
  4. Volejte metodu GetResult objektu. Tato metoda vrátí ukazatel na druhý objekt MODELU COM, který se nazývá položka Shell objektu. Položka prostředí, která implementuje IShellItem rozhraní, představuje soubor, který uživatel vybral.
  5. Volejte GetDisplayName položky shellu metoda. Tato metoda získá cestu k souboru ve formě řetězce.
  6. Zobrazí okno se zprávou, ve které se zobrazí cesta k souboru.
  7. Voláním CoUninitialize zrušte inicializaci knihovny COM.

Kroky 1, 2 a 7 volání funkcí, které jsou definovány knihovnou COM. Jedná se o obecné funkce modelu COM. Kroky 3–5 volání metod, které jsou definovány objektem Common Item Dialog.

Tento příklad ukazuje obě varianty vytvoření objektu: obecná CoCreateInstance funkce a metoda (GetResult), která je specifická pro objekt Common Item Dialog.

Další

správa doby života objektu

Ukázková dialogového okna Otevřít dialogové okno