저는 lpstrFilter를 사용하여 파일을 * .JPG로 필터링하는 OPENFILENAME 구조로 GetOpenFileName을 사용하고 있습니다. 그러나 파일 열기 대화 상자에서 파일 이름에 대해 * .XLS를 입력하고 동일한 폴더에있는 모든 Excel 파일을보고 XLS 파일을 열도록 선택할 수 있습니다. 사용자가이 작업을 수행하지 못하게하고 싶습니다. 예를 들어 JPG 파일 만 선택할 수있게 제한하려고합니다. 이것을 할 수있는 방법이 있습니까?GetOpenFileName은 파일 선택을 필터와 일치하는 파일로 제한 할 수 있습니까?
2
A
답변
5
는 OPENFILENAME
구조체에서 OFN_EXPLORER
및 OFN_ENABLEHOOK
플래그를 활성화하고 lpfnHook
필드에 Explorer-style callback function에 대한 포인터를 제공합니다. 콜백이 CDN_FILEOK
알림을 받으면 입력 한 파일 (파일 이름뿐 아니라 실제 파일 내용도 유효성을 검사 할 수 있음)을 검증 한 다음 적절한 반환 값을 반환하여 선택을 수락/거부합니다 :
후크 프로 시저가 0을 반환하면 대화 상자는 지정된 파일 이름을 허용하고 닫습니다.
지정한 파일 이름을 거부하고 대화 상자를 계속 열려면 훅 프로 시저에서 0이 아닌 값을 반환하고
SetWindowLong
함수를 호출하여 0이 아닌DWL_MSGRESULT
값을 설정하십시오.
+1
또한 'OFN_ENABLEHOOK' 플래그가 필요합니다. 그렇지 않으면'lpfnHook'가 무시됩니다. – zett42
나는 생각합니다. 하지만 심지어 거기에, 그럼 아무것도 jpg로 xls 파일의 이름을 바꾸는 사용자를 막을 것입니다. 또는 비정상적인 연결로 다운로드되거나 손상된 USB 키에 저장된 손상된 JPEG을 열 수 있습니다. 필터 목록은 사용자가 "올바른"파일을 선택하는 데 도움이되는 편의성 일뿐입니다. 응용 프로그램 가비지를 제공하려는 경우 항상 방법이 있습니다. 궁극적으로, 항상 제공되는 파일이 실제로 기대 한 것이 아님을 우아하게 처리하는 코드가 필요할 것입니다. –
Thanks @MatteoItalia –