기록

[VCL] INI 파일 다루기: 파일 쓰기(2) - Dialog로 폴더 경로 가져오기 본문

Desktop

[VCL] INI 파일 다루기: 파일 쓰기(2) - Dialog로 폴더 경로 가져오기

youngyin 2025. 1. 27. 00:00

소개

이 포스팅에서는 C++ Builder를 사용하여 INI 파일의 경로를 사용자에게 직접 입력받지 않고, 파일 다이얼로그를 통해 선택하도록 하는 방법을 설명합니다. VCL과 Windows API를 이용한 두 가지 방법을 소개합니다.

- 이전 포스팅 : 2024.09.05 - [Desktop] - [C++ Builder] INI 파일 다루기 : 파일 쓰기(1)

예제 코드

1. UI 구성하기

먼저, C++ Builder의 폼 디자인에서 다음과 같은 컴포넌트를 추가합니다:

  • TButton: btnOpenFolderVcl (VCL 방식으로 폴더 열기)
  • TButton: btnOpenFolderWin (Windows API 방식으로 폴더 열기)
  • TEdit: edtFilePath (선택된 폴더 경로 표시)

2. VCL 방식으로 폴더 선택하기

btnOpenFolderVcl 버튼을 더블클릭해서 OnClick 이벤트 핸들러를 작성합니다.

void __fastcall TForm1::btnOpenFolderVclClick(TObject *Sender)
{
    // VCL을 사용하여 폴더 선택 다이얼로그 생성
    TFileOpenDialog *folderDialog = new TFileOpenDialog(this);
    folderDialog->Options << fdoPickFolders; // 폴더 선택 옵션 설정
    folderDialog->Title = "폴더를 선택하세요"; // 다이얼로그 제목 설정

    // 다이얼로그 실행
    if (folderDialog->Execute())
    {
        // 선택된 경로를 TEdit에 표시
        edtFilePath->Text = folderDialog->FileName;
    }

    delete folderDialog; // 메모리 해제
}

3. Windows API 방식으로 폴더 선택하기

btnOpenFolderWin 버튼을 더블클릭해서 OnClick 이벤트 핸들러를 작성합니다.

void __fastcall TForm1::btnOpenFolderWinClick(TObject *Sender)
{
    // Windows API를 사용하여 폴더 선택 다이얼로그 생성
    BROWSEINFO bi = {0};
    bi.lpszTitle = L"폴더를 선택하세요"; // 다이얼로그 제목

    // 폴더 선택 대화 상자 열기
    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
    if (pidl != NULL)
    {
        TCHAR path[MAX_PATH];
        // 선택된 폴더의 경로 가져오기
        if (SHGetPathFromIDList(pidl, path))
        {
            // 선택된 경로를 TEdit에 표시
            edtFilePath->Text = path;
        }
        CoTaskMemFree(pidl); // 메모리 해제
    }
}

마무리하면서

  1. VCL 방식과 Windows API 방식
    VCL 방식은 코드가 간단하고 직관적이며, TFileOpenDialog 클래스를 사용하여 폴더 선택 기능을 쉽게 구현할 수 있습니다. 반면 Windows API 방식은 상대적으로 코드가 복잡하고, 직접 구조체와 함수를 다루어야 하기 때문에 초기화와 메모리 해제가 필요하여 조금 더 신경 써야 합니다.
    유연성 측면에서 VCL 방식은 VCL 컴포넌트를 사용하므로 디자인을 시각적으로 다룰 수 있어 사용자 인터페이스를 쉽게 수정할 수 있습니다. 반면 Windows API 방식은 더 많은 제어와 커스터마이징이 가능하여 특정 요구 사항에 맞게 다이얼로그의 동작을 세밀하게 조정할 수 있습니다.
    호환성에 있어 VCL은 Delphi 및 C++ Builder와 같은 RAD 환경에 최적화되어 있어 해당 환경에서의 사용이 추천됩니다. 반면 Windows API 방식은 Windows 운영 체제에서만 사용할 수 있으며, 다른 플랫폼에서는 호환되지 않지만, 더 낮은 수준의 작업이 가능하므로 특정 상황에서는 유리할 수 있습니다.
Comments