OPENFILENAME

선언
typedef struct tagOFN { 
  DWORD         lStructSize; 
  HWND          hwndOwner; 
  HINSTANCE     hInstance; 
  LPCTSTR       lpstrFilter; 
  LPTSTR        lpstrCustomFilter; 
  DWORD         nMaxCustFilter; 
  DWORD         nFilterIndex; 
  LPTSTR        lpstrFile; 
  DWORD         nMaxFile; 
  LPTSTR        lpstrFileTitle; 
  DWORD         nMaxFileTitle; 
  LPCTSTR       lpstrInitialDir; 
  LPCTSTR       lpstrTitle; 
  DWORD         Flags; 
  WORD          nFileOffset; 
  WORD          nFileExtension; 
  LPCTSTR       lpstrDefExt; 
  LPARAM        lCustData; 
  LPOFNHOOKPROC lpfnHook; 
  LPCTSTR       lpTemplateName; 
#if (_WIN32_WINNT >= 0x0500)
  void *        pvReserved;
  DWORD         dwReserved;
  DWORD         FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
} OPENFILENAME, *LPOPENFILENAME; 
설명

파일 열기 공통 대화상자의 초기값을 지정한다. 또한 사용자가 대화상자에서 선택한 파일명을 이 구조체로 리턴해 준다.

멤버

▶lStructSize : OPENFILENAME 구조체의 크기를 지정하며 이 값은 버전 확인을 위해 사용된다. sizeof(OPENFILENAME)을 대입해 주면 된다. 단 2000 이전 버전에서 사용될 프로그램을 2000 환경에서 개발중이라면 OPENFILENAME_SIZE_VERSION_400을 대입해 주어야 한다.

▶hwndOwner : 대화상자의 소유자를 지정한다. 소유자 윈도우가 없을 경우는 NULL로 지정한다.

▶hInstance : 별도의 대화상자 템플리트를 사용할 경우 리소스를 가진 인스턴스 핸들을 지정한다. 필요없으면 NULL로 지정한다.

▶lpstrFilter : 파일 형식 콤보 박스에 나타낼 필터들이며 널 문자를 기준으로 "파일 형식\0필터"와 같이 기술한다. 여러 개의 필터를 \0로 구분해서 동시에 지정할 수 있으며 이 필터는 파일 형식 콤보 박스에 순서대로 나타난다.

▶lpstrCustomFilter : 사용자가 실행중에 선택한 커스텀 필터를 저장하기 위한 버퍼이다. 이 버퍼에 필터 설명을 입력해 놓으면 사용자가 선택한 필터가 두 번째 문자열에 입력된다. nFilterIndex가 0이면 커스텀 필터가 사용된다.

▶nMaxCustFilter : 커스텀 필터 버퍼의 길이이며 최소한 40문자 이상 되어야 한다.

▶nFilterIndex : 파일 형식 콤보 박스에서 사용할 필터의 인덱스를 지정한다. 0이면 커스텀 필터이며 1이면 lpstrFilter의 첫 번째 필터, 2면 lpstrFilter의 두 번째 필터이다. 대화상자가 리턴할 때 이 멤버에는 사용자가 선택한 파일의 필터가 대입된다.

▶lpstrFile : 파일 이름 에디트에 처음 나타낼 파일명을 지정하되 필요없을 경우는 NULL로 지정한다. 또한 이 멤버는 사용자가 최종적으로 선택한 파일의 이름(완전 경로)을 리턴하는 용도로 사용된다. 즉 파일 대화상자가 종료된 후 이 멤버를 통해 사용자가 어떤 파일을 선택했는지를 알게 된다. 반드시 충분한 길이의 버퍼를 제공해야 한다.

▶nMaxFile : lpstrFile 멤버의 길이이다. 최소 256문자 분의 길이를 가져야 한다.

▶lpstrFileTitle : 파일의 이름을 돌려받기 위한 버퍼를 제공한다. 이 버퍼에는 파일의 경로는 포함되지 않으며 파일 이름만 리턴된다. 필요 없으면 NULL로 줄 수도 있다.

▶nMaxFileTitle : lpstrFileTitle 멤버의 길이를 지정한다.

▶lpstrInitialDir : 파일 찾기를 시작할 디렉토리를 지정한다. 대화상자가 열릴 때 이 멤버가 지정하는 디렉토리를 현재 디렉토리로 사용한다. 운영체제 버전에 따라 이 멤버를 사용하는 방법이 약간씩 다르다. 2000의 경우 lpstrFile에 경로가 포함되어 있으면 이 멤버보다 lpstrFile의 경로가 우선이나 98은 이 멤버가 NULL이고 lpstrFile에 경로가 있을 경우만 lpstrFile의 경로가 사용된다. 이 경로가 NULL이면 현재 디렉토리 또는 최후 사용한 디렉토리가 시작 디렉토리가 된다.

▶lpstrTitle : 대화상자의 캡션을 지정한다. 캡션을 지정하지 않으면 "열기" 또는 "저장"이 디폴트 캡션으로 사용된다.

▶Flags : 대화상자의 모양과 동작을 지정하는 옵션을 설정하는 플래그이다. 이 멤버에 지정하는 플래그에 따라 여러 파일 선택, 커스텀 대화상자, 훅 함수 사용, 도움말 지원 여부, 공유 상태 확인 등의 기능이 추가된다.

플래그

설명

OFN_ALLOWMULTISELECT

복수 개의 파일을 선택할 수 있도록 한다. 이 플래그를 OFN_EXPLORER 플래그없이 사용하면 구형 대화상자가 열린다.

OFN_CREATEPROMPT

존재하지 않는 파일명을 입력했을 경우 사용자에게 파일 생성을 할 것인지 물어본다. 사용자가 파일 생성을 선택하면 대화상자가 닫히고 입력한 파일을 리턴하며 그렇지 않을 경우 대화상자는 열린 채로 있는다.

OFN_DONTADDTORECENT

2000이상. 최근 사용한 파일 목록에 선택한 파일의 링크를 추가하지 않는다.

OFN_ENABLEHOOK

lpfnHook 멤버가 가리키는 훅 프로시저를 사용한다.

OFN_ENABLEINCLUDENOTIFY

2000이상. 폴더를 열 때 훅 프로시저에게 CDN_INCLUDEITEM 통지 메시지를 보낸다.

OFN_ENABLESIZING

98이상. 크기 조정이 가능하도록 한다. 디폴트로 크기 조정이 가능하나 커스터마이징한 경우에는 이 플래그를 지정해 주어야 한다.

OFN_ENABLETEMPLATE

리소스의 템플리트를 사용한다. 이때 hInstance는 리소스를 정의하는 모듈의 핸들이다.

OFN_ENABLETEMPLATEHANDLE

리소스의 템플리트를 사용한다. 이때 hInstance는 템플리트 데이터 핸들이다.

OFN_EXPLORER

대화상자의 커스터마이징 방법을 지정한다. 이 플래그가 설정되어 있으면 탐색기 스타일로 커스터마이징하며 그렇지 않으면 구형 방식으로 커스터마이징한다. 이 플래그를 지정하지 않아도 탐색기 스타일로 열리지만 커스터마이징하는 경우나 OFN_ALLOWMULTISELECT 플래그가 지정된 경우는 이 플래그가 있어야 탐색기 스타일로 열린다.

OFN_EXTENSIONDEFFERENT

사용자가 입력한 확장자가 디폴트 확장자와 다를 때 이 플래그가 설정된다. lpstrDefExt가 NULL이면 이 플래그는 사용되지 않는다.

OFN_FILEMUSTEXIST

사용자는 존재하는 파일만 입력해 넣을 수 있으며 없는 파일을 입력한 경우 경고 메시지를 보여준다. 이 플래그는 OFN_PATHMUSTEXIST를 포함한다.

OFN_FORCESHOWHIDDEN

2000이상. 시스템 파일과 숨겨진 파일을 보여준다. 그러나 숨겨진 시스템 파일은 보이지 않는다.

OFN_HIDEREADONLY

읽기 전용 체크 박스를 숨긴다.

OFN_LONGNAMES

구형 대화상자에서 긴 파일 이름을 보여준다. 탐색기 스타일의 대화상자는 이 플래그에 상관없이 항상 긴 파일 이름을 보여준다.

OFN_NOCHANGEDIR

사용자가 파일 선택을 위해 디렉토리를 변경하더라도 현재 디렉토리는 원래대로 유지한다.

OFN_NODEREFERENCELINKS

쇼트컷 파일을 리턴한다. 이 플래그가 지정되지 않으면 쇼트컷이 참조하는 파일을 리턴한다.

OFN_NOLONGNAMES

구형 대화상자에서 짧은 파일 이름을 보여준다. 탐색기 스타일의 대화상자는 이 플래그를 무시한다.

OFN_NONETWORKBUTTON

네트웍 버튼을 숨긴다.

OFN_NOREADONLYRETURN

선택된 파일은 읽기 전용 버튼이 선택되지 않은 상태이며 쓰기 가능한 디렉토리에 있음을 지정한다.

OFN_NOTESTFILECREATE

대화상자가 닫히기 전에 파일이 생성되지 않도록 한다.

OFN_NOVALIDATE

파일명으로 사용할 수 없는 문자를 검사하지 않도록 한다.

OFN_OVERWRITEPROMPT

저장하기 대화상자에서 선택한 파일이 이미 있을 경우 파일을 덮어쓸 것인지를 물어보도록 한다.

OFN_PATHMUSTEXIST

존재하는 경로와 파일만 입력할 수 있도록 한다. 존재하지 않는 파일을 입력하면 경고를 보여준다.

OFN_READONLY

대화상자를 만들 때 읽기 전용 체크 박스를 선택한 채로 생성한다. 또한 이 플래그는 대화상자가 닫힐 때 읽기 전용 체크 박스의 선택 여부를 리턴해 준다.

OFN_SHAREAWARE

네트웍 공유 위반 에러가 발생해도 선택한 파일을 리턴하도록 한다.

OFN_SHOWHELP

도움말 버튼을 보여준다. 사용자가 이 버튼을 누를 경우 소유자 윈도우에게 HELPMSGSTRING 메시지가 전달된다.

 

▶nFileOffset : lpstrFile 버퍼 내의 파일명 오프셋을 리턴한다. lpstrFile 버퍼에서 이 오프셋만큼 더하면 경로명을 제외한 파일명만 얻을 수 있다.

▶nFileExtension : lpstrFile 버퍼 내의 파일 확장자 오프셋을 리턴한다. 확장자를 지정하지 않았으면 오프셋은 널 종료 문자열을 가리키며 제일 끝에 .만 찍어 확장자가 없음을 분명히 입력했으면 이 값은 0이 된다.

▶lpstrDefExt : 사용자가 확장자를 입력하지 않았을 경우 디폴트 확장자를 지정한다. "txt", "exe" 등과 같이 .은 포함하지 않아야 하며 3자 이상은 무시된다.

▶lCustData : 훅 프로시저로 보낼 사용자 정의 데이터이다. 훅 프로시저의 WM_INITDIALOG의 lParam으로 이 구조체 자체가 전달되며 이 멤버를 읽어 사용자 정의 데이터를 구할 수 있다.

▶lpfnHook : OFN_ENABLEHOOK 플래그가 지정되어 있을 때 훅 프로시저를 지정한다.

▶lpTemplateName : OFN_ENABLETEMPLATE 플래그가 지정되어 있을 때 템플리트를 지정한다.

▶pvReserved : 예약된 멤버

▶dwReserved : 예약된 멤버

▶FlagsEx : 대화상자 초기화에 사용할 확장 플래그를 지정한다. OFN_EX_NOPLACEBAR 플래그가 정의되어 있으며 이 플래그를 지정하면 최근 파일, 바탕 화면 등의 플레이스 바가 표시되지 않는다.

참고함수

GetOpenFileName, GetSaveFileName

플랫폼

95이상

참조

 


written by http://www.winapi.co.kr