다음을 통해 공유


예제: 열기 대화 상자

지금까지 사용한 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;
}

이 코드는 모듈의 뒷부분에서 설명하는 몇 가지 개념을 사용하므로 여기서 모든 내용을 이해하지 못해도 걱정하지 마세요. 다음은 코드의 기본 개요입니다.

  1. CoInitializeEx를 호출하여 COM 라이브러리를 초기화합니다.
  2. CoCreateInstance를 호출하여 공통 항목 대화 상자 개체를 만들고 개체의 IFileOpenDialog 인터페이스에 대한 포인터를 가져옵니다.
  3. 사용자에게 대화 상자를 표시하는 개체의 Show 메서드를 호출합니다. 이 메서드는 사용자가 대화 상자를 닫을 때까지 차단됩니다.
  4. 개체의 GetResult 메서드를 호출합니다. 이 메서드는 셸 항목 개체라는 두 번째 COM 개체에 대한 포인터를 반환합니다. IShellItem 인터페이스를 구현하는 셸 항목은 사용자가 선택한 파일을 나타냅니다.
  5. 셸 항목의 GetDisplayName 메서드를 호출합니다. 이 메서드는 문자열 형식의 파일 경로를 가져옵니다.
  6. 파일 경로를 표시하는 메시지 상자를 표시합니다.
  7. CoUninitialize를 호출하여 COM 라이브러리 초기화를 취소합니다.

1단계, 2단계 및 7단계는 COM 라이브러리에서 정의한 함수를 호출합니다. 제네릭 COM 함수입니다. 3~5단계는 공통 항목 대화 상자 개체에서 정의한 메서드를 호출합니다.

이 예제에서는 두 종류의 개체 만들기 방법인 제네릭 CoCreateInstance 함수와 공통 항목 대화 상자 개체와 관련된 메서드(GetResult)를 보여 줍니다.

다음

개체의 수명 관리

열기 대화 상자 샘플