코딩도사의 코드정리

파일 다이얼로그 본문

컴퓨터 이야기/C++

파일 다이얼로그

코딩도사 2010. 7. 17. 17:28
GetOpenFileName GetSaveFileName 

BOOL GetOpenFileName( 

LPOPENFILENAME lpofn   

); 
BOOL GetSaveFileName( 

LPOPENFILENAME lpofn   

); 
먼저 GetOpenFileName 을 소개하고자 한다. 다이얼로그박스 초기화 구조체, 이 구조체는 사용자의 파일선택정보를 저장한다. 리턴 값 사용자가 한 파일이나 OK 버튼을 클릭하면 0이 아닌값을 리턴한다. 취소나 실패했을 땐 0을 리턴한다. 음 다음으로 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; 
   DWORD         lCustData; 
   LPOFNHOOKPROC lpfnHook; 
   LPCTSTR       lpTemplateName; 

} OPENFILENAME; 
보시다 시피 멤버가 엄청 많다. 2000이상에서 또 3개의 멤버가 추가되었다 -_-.. 

lStructSize 

       이 멤버는 그냥 sizeof(OPENFILENAME); 를 대입해 주면 된다. 

hwndOwner 

       대화 상자의 주인을 설정한다. 설정하면 그 대화상자가 끝나기 전까지 주인 윈도우는 사용하지 못한다. NULL 로 설정하면 다른 작업이 가능하다. 

lpstrFilter 

       열 파일의 타입을 지정하는 곳이다. exe 파일이나 php 파일이나 txt 파일등을 지정할 수 있다. (알려지지 않은 파일도 지정할 수 있다.) 
       지정하는 방법은 \0 로 구분해서 쓰는 방법인데, 형식은 이렇다. 
       ="모오든 파일\0*.*\0문서파일\0*.txt;*.doc;*.hwp\0" 
       ="Every File(*.*)\0*.*\0Text File\0*.txt;*.doc\0"; 

lpstrFile 

       이 멤버엔 전체경로가 들어간다. 

nMaxFile 

       적어도 256 이상은 넣어야 한다. 그냥 256 대입해주자. 

lpstrFileTitle 

       파일 이름을 받는다. 필요없으면 NULL 

nMaxFileTitle 

       파일 이름의 최대 길이 
       그러니까 char FileTitle[256]; 
       lpstrFileTitle = FileTitle; 이라고 했으면 여기엔 256 을 넣는게 좋다. 
       더 작은 배열의 크기로 할당했으면 이 값도 바뀌어야 한다. 

lpstrInitialDir 

       파일 열기창이 시작되는 디렉토리, 2000 에서는 이 멤버보다 lpstrFile 멤버가 더 우선순위가 높다. 

lpstrTitle 

       열기 박스의 제목 지정. 

Flags 

       ......MSDN 참고하기 바란다. 

nFileOffset 

       파일명이 시작되는 위치를 리턴한다. lpstrFile 에서 이 멤버만큼 더하면 그게 파일 이름이다. 

nFileExtension 

       위와 같다. 다른건 한가지, 확장자가 시작되는 위치를 리턴한다. 확장자가 입력되지 않았을 경우엔 NULL 을 가리킨다. 

lpstrDefExt 

       확장자를 입력하지 않았을 경우 디폴트 확장자를 지정한다. 
이 정도면 사용하는데 무리없을 듯 싶다. -_-+ 예제코드
#define MAX_PATH 256; 
OPENFILENAME ofn; 
char File[MAX_PATH+1]; 
ZeroMemory(File, sizeof File); ZeroMemory(&ofn, sizeof ofn); 
ofn.lStructSize = sizeof ofn; 
ofn.hwndOwner = hWnd; 
ofn.lpstrFilter = "실행파일\0*.exe\0\0"; 
ofn.lpstrFile = File; 
ofn.nMaxFile = MAX_PATH; 
GetOpenFileName(&ofn) 
주의할 점은 문자열을 초기화 시켜주지 않으면 창이 뜨지 않는다.


'컴퓨터 이야기 > C++' 카테고리의 다른 글

API 후킹  (0) 2010.07.19
C++ 의 mutable 키워드를 아시나요?  (0) 2010.07.17
Self documenting 합시다!!  (1) 2010.07.17
TR1 간단하지만 긴 소개  (0) 2010.05.25
헤더 파일은 적당히 나눠야 한다  (0) 2010.05.25