Program Languege/WinAPI

공통 대화상자 - 2

Frozen0113 2014. 5. 5. 02:13

 필터 지정

 

 필터와 관련된 멤버는 총 4개가 있다. 이중 가장 중요한 멤버는 lpstrFilter이며 이 멤버에 필터를 구성하면 팡리 열기 대화상자의 파일 형식 콤보 박스에 필터를 보여준다. lpstrFilter에는 여러 개의 필터를 줄 수 있으며 각 필터는 설명과 패턴으로 구성되고 각 항목은 NULL로 구분된다. 마지막 항목은 두 개의 NULL로 끝나야 한다.

 

 

 

 위 필터는 "텍스트 문서\0*.txt\0모든 파일\0*.*\0"로 구성되어 있다.

한 필터에 두 개 이상의 패턴을 지정하려면 "그래픽 파일\0*.gif;*.jpg\0"처럼 세미콜론으로 패턴을 연결하면 된다.

 

 lpstrCustomFilter는 사용자가 입력하는 필터를 조사하기 위한 멤버이며 이 버퍼에 커스텀 필터의 설명을 미리 작성해 놓으면 대화상자가 닫힐 때 패턴을 뒤에 붙여준다.

 

 

 

복수 개의 파일 선택

 

 복수 개의 파일명을 입력받고자 할 때는 OFN_ALLOWMULISELECT 플래그를 지정한다. 이 플래그만 주면 구형 대화상자가 열리므로 이 때는 반드시 OFN_EXPLORER 플래그도 같이 지정하는 것이 좋다. 선택된 결과는 역시 lpstrFile 버퍼에 복사된다. 복수 개의 파일 선택시에도 선택 파일 모두를 포함 할 수 있어야 하므로 충분한 길이를 할당해야 한다. 선택된 파일들을 복사할 만큼 충분하지 않으면GetOpenFileName함수는 FALSE를 리턴한다. 여러개의 파일이 선택된 경우 다음과 같이 정보들이 복사된다.

 

 

 

 첫번째 항목은 파일을 선택한 폴더 경로가 들어가고 두 번째 항목부터는 선택된 파일명만 복사되며 각 항목은 NULL문자('\0')로 구분된다. 같은 폴더내의 파일들이기때문에 폴더 경로 하나면 된다. 제일 끝은 NULL문자 두개로 되어있다.

 

 DWORD CommDlgExtendedError(VOID);

 

 위 함수로 어떤 종류의 에러가 발생했는지 조사할 수 있다.

 

 

디렉토리 선택

 

 디렉토리 경로만을 입력받고 싶을 때는 파일 열기 대화상자를 사용할 수 없으며 별도의 디렉토리 선택 함수를 사용해야 한다. 다운로드 파일을 저장할 폴더나 검색 시작 경로 등을 입력받고 싶을 때 이 함수가 필요하다. 쉘이 제공하는 함수에 의해 지원되며 여기서 쉘은 탐색기를 의미한다.

  

    SHBrowseForFolder함수를 사용하면 되는데 이 부분은 다음에 하도록 하자.

 

 

출처 - 윈도우즈 API 정복