2 augusti, 2019 Incopia

cfiledialog 예제

목록 상자에서 선택 변경 내용을 사용자 지정 처리하도록 이 함수를 재정의합니다. 예를 들어 이 함수를 사용하여 사용자가 선택한 각 파일의 액세스 권한 또는 마지막으로 수정된 날짜를 표시할 수 있습니다. 이 예제는 CFile Dialog를 표시하기 전에 업데이트합니다. m_ofn 멤버 변수를 업데이트하기 전에 대화 상자의 현재 상태로 동기화해야 합니다. 예를 들어 입력한 파일의 이름이 DATA인 경우입니다. TXT, GetFileExt는 ”TXT”를 반환합니다. 예를 들어 사용자가 여러 파일을 선택할 수 있도록 허용하려면 이 항목의 코드 예제와 같이 DoModal을 호출하기 전에 OFN_ALLOWMULTISELECT 플래그를 설정합니다. 대부분의 경우 공통 대화 상자 클래스를 직접 사용할 수 있습니다. 사용자 고유의 클래스를 파생하는 경우 코드를 복제하지 않고 기능을 추가할 수 있습니다. 그러나 각 COMDLG32 대화 상자는 약간 다르게 작동합니다.

다음 예제는 파일 대화 상자에 만전을 기하지만 다른 일반적인 대화 상자를 사용자 지정하기 위한 몇 가지 아이디어를 제공해야 합니다. 이 책의 초기 버전에서 MYMFC10 예제는 표준 파일 대화 상자 내에서 동적으로 컨트롤을 만들었습니다. 이 기술은 Win32에서 작동하지 않지만 여기에 설명된 중첩 대화 상자 메서드는 동일한 효과를 가합니다. MYMFC10 예제에서는 대화 상자에 푸시 버튼을 추가했습니다. 다른 컨트롤도 쉽게 추가할 수 있습니다. 리소스 템플릿에 넣기만 하면 컨트롤 편집 또는 목록 상자와 같은 표준 Windows 컨트롤인 경우 ClassWizard를 사용하여 파생 클래스에 데이터 멤버 및 DDX/DDV 코드를 추가할 수 있습니다. 클라이언트 프로그램은 DoModal()을 호출하기 전에 데이터 멤버를 설정할 수 있으며 DoModal()이 반환된 후 업데이트된 값을 검색할 수 있습니다. 중첩된 대화 상자를 사용하지 않더라도 두 개의 창이 여전히 CfileDialog 개체와 연결됩니다. 파생 클래스에서 OnInitDialog()를 재정의했으며 파일 대화 상자에 아이콘을 할당하려고 한다고 가정합니다.

MYMFC10 예제에서와 마찬가지로 최상위 창을 얻으려면 CWnd::GetParent를 호출해야 합니다. 코드는 다음과 같습니다: 이 함수의 두 번째 버전을 사용하여 파일 열기 또는 파일 저장 대화 상자가 생성된 후 DoModal 멤버 함수와 함께 표시되기 전에 대화 상자의 모양을 초기화합니다. 예를 들어 m_ofn의 lpstrTitle 멤버를 대화 상자에 사용할 캡션으로 설정할 수 있습니다.