예제: 열기 대화 상자
지금까지 사용한 Shapes
예제는 다소 인위적입니다. 실제 Windows 프로그램인 열기 대화 상자에서 사용할 수 있는 COM 개체를 살펴보겠습니다.
열기 대화 상자를 표시하기 위해 프로그램은 공통 항목 대화 상자 개체라는 COM 개체를 사용할 수 있습니다. 공통 항목 대화 상자는 헤더 파일 Shobjidl.h에 선언된 IFileOpenDialog라는 인터페이스를 구현합니다.
다음은 사용자에게 열기 대화 상자를 표시하는 프로그램입니다. 사용자가 파일을 선택하면 프로그램에 파일 이름이 포함된 대화 상자가 표시됩니다.
#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)를 보여 줍니다.
다음
관련 항목