Contoh: Kotak dialog Buka

Contoh Shapes yang telah kita gunakan agak disusupi. Mari kita beralih ke objek COM yang mungkin Anda gunakan dalam program Windows nyata: kotak dialog Buka .

cuplikan layar memperlihatkan kotak dialog terbuka

Untuk memperlihatkan kotak dialog Buka , program bisa menggunakan objek COM yang disebut objek Dialog Item Umum. Dialog Item Umum mengimplementasikan antarmuka bernama IFileOpenDialog, yang dideklarasikan dalam file header Shobjidl.h.

Berikut adalah program yang menampilkan kotak dialog Buka kepada pengguna. Jika pengguna memilih file, program akan menampilkan kotak dialog yang berisi nama 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;
}

Kode ini menggunakan beberapa konsep yang akan dijelaskan nanti dalam modul, jadi jangan khawatir jika Anda tidak memahami semuanya di sini. Berikut adalah kerangka dasar kode:

  1. Panggil CoInitializeEx untuk menginisialisasi pustaka COM.
  2. Panggil CoCreateInstance untuk membuat objek Dialog Item Umum dan dapatkan penunjuk ke antarmuka IFileOpenDialog objek.
  3. Panggil metode Tampilkan objek, yang memperlihatkan kotak dialog kepada pengguna. Metode ini memblokir hingga pengguna menutup kotak dialog.
  4. Panggil metode GetResult objek. Metode ini mengembalikan penunjuk ke objek COM kedua, yang disebut objek item Shell . Item Shell, yang mengimplementasikan antarmuka IShellItem , mewakili file yang dipilih pengguna.
  5. Panggil metode GetDisplayName item Shell. Metode ini mendapatkan jalur file, dalam bentuk string.
  6. Perlihatkan kotak pesan yang menampilkan jalur file.
  7. Panggil CoUninitialize untuk membatalkan inisialisasi pustaka COM.

Langkah 1, 2, dan 7 fungsi panggilan yang ditentukan oleh pustaka COM. Ini adalah fungsi COM generik. Langkah 3–5 metode panggilan yang ditentukan oleh objek Dialog Item Umum.

Contoh ini menunjukkan kedua varietas pembuatan objek: Fungsi CoCreateInstance generik, dan metode (GetResult) yang khusus untuk objek Dialog Item Umum.

Berikutnya

Mengelola Masa Pakai Objek

Buka Sampel Kotak Dialog