Udostępnij za pomocą


Przykład: otwarte okno dialogowe

Przykład Shapes, którego używaliśmy, jest nieco zaintrygowany. Przejdźmy do obiektu COM, którego można użyć w rzeczywistym programie systemu Windows: Otwórz okno dialogowe.

zrzut ekranu przedstawiający otwarte okno dialogowe

Aby wyświetlić okno dialogowe Otwórz, program może użyć obiektu COM o nazwie obiektu Okna dialogowego wspólnego elementu. Okno dialogowe Wspólnego elementu implementuje interfejs o nazwie IFileOpenDialog, który jest zadeklarowany w pliku nagłówka Shobjidl.h.

Oto program, który wyświetla użytkownikowi okno dialogowe Otwórz. Jeśli użytkownik wybierze plik, program wyświetli okno dialogowe zawierające nazwę pliku.

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

Ten kod używa niektórych pojęć, które zostaną opisane w dalszej części modułu, więc nie martw się, jeśli nie rozumiesz wszystkiego w tym miejscu. Oto podstawowy konspekt kodu:

  1. Wywołaj CoInitializeEx, aby zainicjować bibliotekę COM.
  2. Wywołaj CoCreateInstance, aby utworzyć obiekt okna dialogowego wspólnego elementu i uzyskać wskaźnik do interfejsu IFileOpenDialog obiektu.
  3. Wywołaj metodę Show obiektu, która wyświetla okno dialogowe użytkownikowi. Ta metoda blokuje, dopóki użytkownik nie odrzuci okna dialogowego.
  4. Wywołaj metodę GetResult obiektu. Ta metoda zwraca wskaźnik do drugiego obiektu COM o nazwie elementu Shell obiektu. Element powłoki, który implementuje interfejs IShellItem, reprezentuje plik wybrany przez użytkownika.
  5. Wywołaj metodę GetDisplayName elementu powłoki. Ta metoda pobiera ścieżkę pliku w postaci ciągu.
  6. Pokaż pole komunikatu z wyświetloną ścieżką pliku.
  7. Wywołaj CoUninitialize, aby niezainicjować bibliotekę COM.

Kroki 1, 2 i 7 wywołania funkcji zdefiniowanych przez bibliotekę COM. Są to ogólne funkcje COM. Kroki 3–5 metod wywołania, które są definiowane przez obiekt Okna dialogowego wspólnego elementu.

W tym przykładzie przedstawiono obie odmiany tworzenia obiektów: ogólna funkcja CoCreateInstance oraz metoda (GetResult), która jest specyficzna dla obiektu Okna dialogowego wspólnego elementu.

Następny

zarządzanie okresem istnienia obiektu

otwórz okno dialogowe Przykładowe