我们一直在使用的 Shapes
示例有点复杂。 让我们转到可在实际 Windows 程序中使用的 COM 对象:“打开”对话框。
显示打开对话框屏幕截图
若要显示“打开 ”对话框,程序可以使用名为“公用项对话框”对象的 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 以创建 Common Item Dialog 对象,并获取指向对象的 IFileOpenDialog 接口的指针。
- 调用对象的 Show 方法,该方法向用户显示对话框。 此方法会阻止用户关闭对话框。
- 调用对象的 GetResult 方法。 此方法返回指向第二个 COM 对象的指针,该对象称为 Shell 项 对象。 实现 IShellItem 接口的 Shell 项表示用户选择的文件。
- 调用 Shell 项的 GetDisplayName 方法。 此方法以字符串的形式获取文件路径。
- 显示显示文件路径的消息框。
- 调用 CoUninitialize 以取消初始化 COM 库。
步骤 1、2 和 7 调用 COM 库定义的函数。 这些是通用 COM 函数。 步骤 3-5 调用由通用项对话框对象定义的方法。
此示例显示了对象创建两个品种:泛型 CoCreateInstance 函数,以及特定于 Common Item Dialog 对象的方法(GetResult)。
下一个
相关主题