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