共用方式為


範例:開啟對話框

我們一直在使用的 Shapes 範例有點令人心動。 讓我們轉向您可以在實際 Windows 程式中使用的 COM 物件:[開啟] 對話方塊。

顯示開啟對話框的螢幕快照 螢幕快照

若要顯示 [開啟 ] 對話框,程式可以使用稱為 Common Item Dialog 物件的 COM 物件。 Common Item Dialog 會實作名為 IFileOpenDialog的介面,該介面會在頭檔 Shobjidl.h 中宣告。

以下是向用戶顯示 [開啟 ] 對話框 的程式。 如果使用者選取檔案,程式會顯示包含檔名的對話方塊。

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

此程式代碼會使用本課程模組稍後將描述的一些概念,因此,如果您不瞭解這裡的一切,請不要擔心。 以下是程式代碼的基本大綱:

  1. 呼叫 CoInitializeEx 以初始化 COM 連結庫。
  2. 呼叫 CoCreateInstance 來建立 Common Item Dialog 物件,並取得物件的 IFileOpenDialog 介面指標。
  3. 呼叫物件的 Show 方法,向使用者顯示對話方塊。 這個方法會封鎖直到使用者關閉對話框為止。
  4. 呼叫物件的 GetResult 方法。 這個方法會傳回第二個 COM 物件的指標,稱為 Shell 專案 物件。 實作 IShellItem 介面的 Shell 專案代表用戶選取的檔案。
  5. 呼叫 Shell 專案的 GetDisplayName 方法。 這個方法會以字串的形式取得檔案路徑。
  6. 顯示顯示檔案路徑的消息框。
  7. 呼叫 CoUninitialize 來取消初始化 COM 連結庫。

步驟 1、2 和 7 會呼叫 COM 連結庫所定義的函式。 這些是泛型 COM 函式。 步驟 3–5 呼叫 Common Item Dialog 物件所定義的方法。

這個範例顯示物件建立的兩個品種:泛型 CoCreateInstance 函式,以及 Common Item Dialog 物件特有的方法(GetResult)。

下一個

管理物件 的存留期

開啟對話框範例