共用方式為


範例:開啟對話方塊

Shapes我們先前使用的範例稍有缺點。 讓我們開啟您可以在實際 Windows 程式中使用的 COM 物件:[ 開啟 ] 對話方塊。

顯示開啟對話方塊的螢幕擷取畫面

若要顯示 [ 開啟 ] 對話方塊,程式可以使用名為 Common Item Dialog 物件的 COM 物件。 通用專案對話方塊會實作名為 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 以建立通用專案對話方塊物件,並取得物件的 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 函式,以及 GetResult () 專屬於 Common Item Dialog 物件的方法。

下一個

管理物件的存留期

開啟對話方塊範例