|
OPENFILENAME
선문비트 23기
박기현
목적
파일 열기 공통 대화상자의 초기값을 지정한다. 또한 사용자가 대화상자에서 선택
한 파일명을 이 구조체로 반환해준다.
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
} OPENFILENAME, *LPOPENFILENAME;
} lStructSize : OPENFILENAME 구조체의 크기를 지정하며 이 값은 버전 확인을 위해 사용된다. sizeof(OPENFILENAME)을 대입해 주면 된다
} 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 : 파일 찾기를 시작할 디렉토리를 지정한다. 대화상자가 열릴 때 이 멤버가 지정하는 디렉토리를 현재 디렉토리로 사용한다.
} lpstrTitle : 대화상자의 캡션을 지정한다. 캡션을 지정하지 않으면 "열기" 또는 "저장"이 디폴트 캡션으로 사용된다.
} Flags : 대화상자의 모양과 동작을 지정하는 옵션을 설정하는 플래그이다. 이 멤버에 지정하는 플래그에 따라 여러 파일 선택, 커스텀 대화상자, 훅 함수 사용, 도움말 지원 여부, 공유 상태 확인 등의 기능이 추가된다.
} 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 플래그가 정의되어 있으며 이 플래그를 지정하면 최근 파일, 바탕 화면 등의 플레이스 바가 표시되지 않는다.
플래그 |
설명 |
OFN_ALLOWMULTISELECT |
복수 개의 파일을 선택할 수 있도록 한다. |
OFN_CREATEPROMPT |
존재하지 않는 파일명을 입력했을 경우 사용자에게 파일 생성을 할 것인지 물어본다. |
OFN_DONTADDTORECENT |
최근 사용한 파일 목록에 선택한 파일의 링크를 추가하지 않는다. |
OFN_ENABLEHOOK |
lpfnHook 멤버가 가리키는 훅 프로시저를 사용한다. |
OFN_ENABLEINCLUDENOTIFY |
폴더를 열 때 훅 프로시저에게 CDN_INCLUDEITEM 통지 메시지를 보낸다. |
OFN_ENABLESIZING |
크기 조정이 가능하도록 한다
|
OFN_ENABLETEMPLATE |
리소스의 템플리트를 사용한다. 이때 hInstance는 리소스를 정의하는 모듈의 핸들이다. |
OFN_ENABLETEMPLATEHANDLE |
리소스의 템플리트를 사용한다. 이때 hInstance는 템플리트 데이터 핸들이다. |
OFN_EXPLORER |
이 플래그가 설정되어 있으면 탐색기 스타일로 커스터마이징하며 그렇지 않으면 구형 방식으로 커스터마이징한다. 이 플래그를 지정하지 않아도 탐색기 스타일로 열리지만 커스터마이징하는 경우나 OFN_ALLOWMULTISELECT 플래그가 지정된 경우는 이 플래그가 있어야 탐색기 스타일로 열린다. |
OFN_EXTENSIONDEFFERENT |
사용자가 입력한 확장자가 디폴트 확장자와 다를 때 이 플래그가 설정된다. lpstrDefExt가 NULL이면 이 플래그는 사용되지 않는다. |
OFN_FILEMUSTEXIST |
사용자는 존재하는 파일만 입력해 넣을 수 있으며 없는 파일을 입력한 경우 경고 메시지를 보여준다. |
OFN_FORCESHOWHIDDEN |
시스템 파일과 숨겨진 파일을 보여준다. 그러나 숨겨진 시스템 파일은 보이지 않는다. |
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 메시지가 전달된다. |
사용 함수
- GetOpenFileName, GetSaveFileName
GetOpenFileName
} BOOL GetOpenFileName(LPOPENFILENAME Ipofn);
} 파일 열기 공통 대화상자 초기화에 사용될 OPENFILENAME 구조체의 포인터.
} 파일 오픈시 읽을 파일명을 얻어주는 함수
} 에러 발생 시 0 반환
GetSaveFileName
} BOOL GetSaveFileName(LPOPENFILENAME lpofn);
} 파일 저장시 저장할 파일명을 얻어주는 함수
} 에러 발생시 0 반환
void Document::OfnFileSend(HWND hWnd) { szFileName[0]=0; memset(&ofn,0,sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter=L"모¬©£든ìc파¡A일I(*.*)"; ofn.nFilterIndex = 1; ofn.lpstrFile = szFileName; ofn.nMaxFile = 255;
if(GetOpenFileName(&ofn)!=0) { ic->SetNewBuf(0); ic->ThreadBuf(ofn.lpstrFile,0); } } |
간단한 파일 불러와서 파일 보내는 사용 예 ( IOCP 이용) |
|
화면 보여주기 |
|