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