示例:“打开”对话框
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 调用由 Common Item Dialog 对象定义的方法。
此示例演示对象创建的品种:泛型 CoCreateInstance 函数,以及特定于 Common Item Dialog 对象的 GetResult) 方法 (。
下一步
相关主题