Пример: диалоговое окно "Открыть"
Пример Shapes
, который мы использовали, несколько надуман. Давайте обратимся к COM-объекту, который можно использовать в реальной программе Windows: диалоговое окно Открыть .
Чтобы отобразить диалоговое окно Открыть , программа может использовать 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-объект, называемый объектом элемента оболочки . Элемент оболочки, реализующий интерфейс IShellItem , представляет файл, выбранный пользователем.
- Вызовите метод GetDisplayName элемента оболочки. Этот метод получает путь к файлу в виде строки.
- Отображение окна сообщения, в котором отображается путь к файлу.
- Вызовите CoUninitialize , чтобы не инициализировать библиотеку COM.
Шаги 1, 2 и 7 вызывают функции, определенные библиотекой COM. Это универсальные функции COM. Шаги 3–5 вызывают методы, определенные объектом диалогового окна "Общий элемент".
В этом примере показаны оба варианта создания объекта: универсальная функция CoCreateInstance и метод (GetResult), относящееся к объекту Common Item Dialog.
Следующая
Управление временем существования объекта
Связанные темы