다음을 통해 공유


예: 열기 대화 상자

사용했던 Shapes 예제는 다소 모순됩니다. 실제 Windows 프로그램에서 사용할 수 있는 COM 개체인 열기 대화 상자를 살펴보겠습니다.

열려 있는 대화 상자스크린샷

열기 대화 상자를 표시하기 위해 프로그램에서 Common Item Dialog 개체라는 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 메서드를 호출합니다. 이 메서드는 Shell 항목 개체라는 두 번째 COM 개체에 대한 포인터를 반환합니다. IShellItem 인터페이스를 구현하는 셸 항목은 사용자가 선택한 파일을 나타냅니다.
  5. 셸 항목의 GetDisplayName 메서드를 호출합니다. 이 메서드는 문자열 형식의 파일 경로를 가져옵니다.
  6. 파일 경로를 표시하는 메시지 상자를 표시합니다.
  7. CoUninitialize 호출하여 COM 라이브러리를 초기화하지 않습니다.

1단계, 2단계 및 7단계는 COM 라이브러리에 의해 정의된 함수를 호출합니다. 이러한 함수는 제네릭 COM 함수입니다. 3~5단계에서는 Common Item Dialog 개체에 의해 정의된 메서드를 호출합니다.

이 예제에서는 제네릭 CoCreateInstance 함수와 Common Item Dialog 개체와 관련된 메서드(GetResult)의 두 가지 개체 만들기를 보여 줍니다.

다음

개체 수명 관리

대화 상자 샘플