from WIN32 API정복 by 김상형
----------------------------------------------
열기든 저장하기든 사용하는 구조체는 같다. 단지 호출하는 함수가 다를 뿐이다.
구조체를 살펴보면,
typedef struct tagOFN{
DWORD lStructSize; // 구조체 크기
HWND hwndOwner; // 오너 윈도우 핸들
HINSTANCE hInstance; // 인스턴스 핸들
LPCTSTR lpStrFilter; // 파일 형식 필터
LPTSTR lpstrCustomfilter; //커스텀 필더를 저장하기 위한 버퍼
DWORD nMaxCustFilter; //커스텀 필터 버퍼의 길이
DWORD nFilterIndex; //파일 형식 필터 기본 인덱스
LPTSTR lpstrFile; // 파일명. 처음 표시되는 파일명
DWORD nMaxFile; //lpstrFile의 길이
LPTSTR lpstrFileTitle; //선택한 파일명을 리턴받기 위한 버퍼
DWORD nMaxFileTitle; //lpstrFileTitle 의 길이
LPCTSTR lpstrInitialDir; //초기 디렉토리
LPCTSTR lpstrTitle; //대화상자 캡션
DWORD Flags; //플래그 (아래 참조)
WORD nFileOffset; //lpstrFile버퍼 내의 파일명 오프셋
WORD nFileExtension; //lpstrFile버퍼 내의 파일 확장자 오프셋
LPCTSTR lpstrDefExt; //디폴트 확장자
DWORD lCustData; //훅 프로시저로 보낼 사용자 정의 데이터
LPOFNHOOKPROC lpfnHook; //훅 프로시저명
LPCTSTR lpTemplateName; //템플릿 명
} OPENFILENAME;
lpstrFilter : 파일을 걸러낼 필터. 대화상자 아랫쪽의 콤보박스에 나타낼 값.
설명\0확장자\0설명\0확장자.....
식으로 여러개 사용 가능.
lpstrCustomFilter는 사용자가 직접 입력한 필터를 저장할 버퍼이며, nFilterIndex가 0이면 커스텀 필터를 사용할수 있으며,
nMaxCustFilter는 40바이트 이상이어야 한다.
nFilterIndex 는 초기에 선택할 필터의 인덱스이다.
lpstrFileTitle은 파일 이름을 리턴받기 위한 버퍼로 경로명은 포함되지 않는다.
경로명까지 받기 위해서는 lpstrFile멤버를 사용하면 된다.
또한 lpstrFile멤버변수는 초기에 나타낼 파일명이기도 하다.
nMaxFile은 256바이트 이상.
lpstrInitialDir은 처음 폴더를 지정한다.
98에서는 이 멤버가 NULL이고 lpstrFile에 경로가 있을 경우만 lpstrFile의 경로가 사용된다.
2000에서는 lpstrFile에 경로가 포함되어 있으면 이 멤버보다 lpstrFile의 경로가 우선된다.
Flags
OFN_ALLOWMULTISELECT //복수개의 파일 선택 가능.
이 플래그를 OFN_EXPLORER없이 사용하면 구형 대화상자가 열린다.
OFN_CREATEPROMPT // '파일을 생성할까요?' 대화상자 표시 여부
OFN_ENABLEHOOK // 훅 프로시저 사용
OFN_EXTENSIONDEFFERENT // 사용자가 입력한 확장자가 디폴트 확장자와 다를때 이 플래그가 셋팅된다.
OFN_FILEMUSTEXIST //존재하는 파일만 선택 가능
OFN_NOTESTFILECREATE //대화상자가 닫히기 전에 파일이 생성되지 않도록 한다. (무슨말인지?)
OFN_OVERWRITEPROMPT // 파일이 이미 존재할 경우 덮어쓰기 대화상자 표시
OFN_PATHMUSTEXIST //존재하는 경로와 파일만 선택 가능
파일 열기는
GetOpenFileName()을 사용하고,
저장 대화상자는
GetSaveFileName()을 사용한다.
둘다 인자로 위 구조체를 사용하며, 해당 파일의 데이터도 구조체에 저장된다.
성공시 TRUE, 취소 혹은 에러는 FALSE를 리턴한다.
'Knowledge > C/C++/VC++' 카테고리의 다른 글
폴더선택창 열기 (1) | 2007.05.04 |
---|---|
레지스트리 접근 (0) | 2007.05.04 |
프로세스 구하기/kill하기 (0) | 2007.05.04 |
Win32 플랫폼 버전 확인 (0) | 2007.05.04 |
MFC ListView_GetCheckState(SetCheckState)버그 (0) | 2007.05.04 |