範例:開啟對話框
我們一直在使用的 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;
}
此程式代碼會使用本課程模組稍後將描述的一些概念,因此,如果您不瞭解這裡的一切,請不要擔心。 以下是程式代碼的基本大綱:
- 呼叫 CoInitializeEx 以初始化 COM 連結庫。
- 呼叫 CoCreateInstance 來建立 Common Item Dialog 物件,並取得物件的 IFileOpenDialog 介面指標。
- 呼叫物件的 Show 方法,向使用者顯示對話方塊。 這個方法會封鎖直到使用者關閉對話框為止。
- 呼叫物件的 GetResult 方法。 這個方法會傳回第二個 COM 物件的指標,稱為 Shell 專案 物件。 實作 IShellItem 介面的 Shell 專案代表用戶選取的檔案。
- 呼叫 Shell 專案的 GetDisplayName 方法。 這個方法會以字串的形式取得檔案路徑。
- 顯示顯示檔案路徑的消息框。
- 呼叫 CoUninitialize 來取消初始化 COM 連結庫。
步驟 1、2 和 7 會呼叫 COM 連結庫所定義的函式。 這些是泛型 COM 函式。 步驟 3–5 呼叫 Common Item Dialog 物件所定義的方法。
這個範例顯示物件建立的兩個品種:泛型 CoCreateInstance 函式,以及 Common Item Dialog 物件特有的方法(GetResult)。
下一個
管理物件 的存留期
相關主題