열기 대화상자
파일 열기 대화상자를 호출할 때는 사용하는 함수
BOOL GetOpenFileName( LPOPENFILENAME lpofn ); |
typedef struct tagOFN { // ofn 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; // OFN_ENABLEHOOK 플래그가 지정되어 있을 때 혹 프로짓져를 지정 LPCTSTR lpTemplateName; // OFN_ENABLEHOOK 플래그가 지정되어 있을 때 템플릿을 지정 } OPENFILENAME; |
OPENFILENAME 구조체의 예
static char filepath[100], filename[100]; OFN.lStructSize = sizeof(OPENFILENAME); // 구조체의 크기 OFN.hwndOwner = hwnd; // 윈도우 핸들 OFN.nMaxFileTitle = 100; // 선택한 파일 경로의 최대 길이 OFN.lpstrFileTitle = filename; // 선택한 파일의 이름을 지정 OFN.nMaxFile = 100; // 선택한 파일 이름의 최대 크기 GetOpenFileName(&OFN) // 열기 대화상자 호출 |
열기 대화상자
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { OPENFILENAME OFN; TCHAR str[100], lpstrFile[100] = _T(""); TCHAR filter[] = _T("Every File(*.*) \0*.*\0Text File\0*.txt;*.doc\0");
switch (iMsg) { case WM_CREATE: break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_FILEOPEN: memset(&OFN, 0, sizeof(OPENFILENAME)); OFN.lStructSize = sizeof(OPENFILENAME); OFN.hwndOwner = hwnd; // 대화상자 소유자 (원도우 핸들) OFN.lpstrFilter = filter; OFN.lpstrFile = lpstrFile; // 파일 경로 OFN.nMaxFile = 100; // lpstrFile의 최대 길이 OFN.lpstrInitialDir = _T("."); //파일 찾기를 시작할 디렉토리르 지정 if (GetOpenFileName(&OFN) != 0) { _stprintf_s(str, _T("%s 파일을열겠습니까), OFN.lpstrFile); MessageBox(hwnd, str, _T("열기선택"), MB_OK); } break; } break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hwnd, iMsg, wParam, lParam); } |
실행 결과]
파일 열기함수
_tfopen_s() 함수 |
erron_t _tfopen_s( FILE** fPtr, // fPtr는 파일을 열고 나서 열려 있는 파일에 대한 포인터를 저장할 곳의 주소 const tchar_t *filename, // 파일 이름 const tchar_t *mode // 어떤 용도로 파일을 열는지를 지정 ( r, w, a ), ccs =인코딩 ); |
ANSI, 유니코드 상관없이 줄 단위로 텍스트 파일 읽어오는 함수
_fgetts() 함수 |
tchar_t *_fgetts( tchar_t *str, // fPtr이 가리키는 파일에서 한 줄을 읽어와 str이 가리키는 공간에 저장 int n, // str이 가리키는 공간의 크기 FILE *fPtr ); |
파일에 한 줄 단위로 쓰는 함수
_fputts() 함수 |
int _fputts( const tchar_t *str, // fPtr가 가리키는 파일에 str이 가리키는 공간에 있는 문자열을 출력 FILE *fPtr ); |
함수가 성공적으로 출력되면 양수값을 반환하고 에러가 발생하면 EOF를 반환한다.
_fputts() 함수를 이용해 한글을 출력하고자 할 때는 파일을 열기 전에 먼저 locale을 한국어로 설정해야 한다.
_tsetlocale(LC_ALL, _T("korean"));
스트림에서 형식이 지정된 순서대로 읽어오는 함수
_ftscanf_s()함수 |
int _ftscanf_s( FILE*fPtr, const tchar_t *format, // fPtr이 가리키는 파일로부터 format이 정한 순서대로 argument을 읽어온다. argument ... ); |
파일의 끝에 도달하면 EOF를 반환한다.
형식이 지정된 순서대로 스트림에 출력하는 함수
_ftprintf_s() 함수 |
int _ftprintf_s( FILE *fPtr, const tchar_t *format, // format에서 정한 순서대로 내용을 반영한 후 fPtr이 가리키는 파일에 출력 argument ... ); |
문자열의 길이를 반환하는 함수
_tcslen() 함수 |
size_t _tcslen( const tchar_t *str // str이 가리키는 문자열 ); |
텍스트파일 읽어오기
#include<stdio.h> { FILE *fPtr; HDC hdc; int line; TCHAR buffer[500]; line = 0; hdc = GetDC(hwnd); #ifdef _UNICODE _tfopen_s(&fPtr, filename, _T("r, ccs = UNICODE")); // 유니코드로 파일 열기 #else _tfopen_s(&fPtr, filename, _T("r")); #endif while (_fgetts(buffer, 100, fPtr) != NULL) // 줄 단위로 텍스트 파일 읽어오는 함수 { if (buffer[_tcslen(buffer) - 1] == _T('\n')) buffer[_tcslen(buffer) - 1] = NULL; TextOut(hdc, 0, line * 20, buffer, _tcslen(buffer)); line++; } fclose(fPtr); ReleaseDC(hwnd, hdc); }
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { OPENFILENAME OFN; TCHAR lpstrFile[100] = _T(""); TCHAR filter[] = _T("Every File(*.*) \0*.*\0") _T("Text File\0*.txt;*.doc\0"); switch (iMsg) { case WM_CREATE: break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_FILEOPEN: memset(&OFN, 0, sizeof(OPENFILENAME)); OFN.lStructSize = sizeof(OPENFILENAME); OFN.hwndOwner = hwnd; OFN.lpstrFilter = filter; OFN.lpstrFile = lpstrFile; // 파일 경로 OFN.nMaxFile = 256; OFN.lpstrInitialDir = _T("."); //파일 찾기를 시작할 디렉토리르 지정 if (GetOpenFileName(&OFN) != 0) // 파일 오픈 대화상자 열기 OutFromFile(OFN.lpstrFile, hwnd); // 함수호출(파일이름과 윈도우 핸들) break; } break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hwnd, iMsg, wParam, lParam); } |
실행 결과]
다른 이름으로 저장하기 대화상자
파일을 저장할때 사용하는 함수
BOOL GetSaveFileName( LPOPENFILENAME lpofn ); |
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { OPENFILENAME OFN; OPENFILENAME OFN; TCHAR lpstrFile[100] = _T(""); TCHAR filter[] = _T("Every File(*.*) \0*.*\0") _T("Text File\0*.txt;*.doc\0"); switch (iMsg) { case WM_CREATE: break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_FILESAVE: memset(&SFN, 0, sizeof(OPENFILENAME)); SFN.lStructSize = sizeof(OPENFILENAME); SFN.hwndOwner = hwnd; SFN.lpstrFilter = filter; SFN.lpstrFile = lpstrFile; // 파일 경로 SFN.nMaxFile = 256; SFN.lpstrInitialDir = _T("."); if (GetSaveFileName(&SFN) != 0) // 다른이름으로 저장하기 대화상자 열기 { _stprintf_s(str, _T("%s 파일로저장하겠습니까), SFN.lpstrFile); MessageBox(hwnd, str, _T("저장하기선택"), MB_OK); } break; case ID_FILEOPEN: memset(&OFN, 0, sizeof(OPENFILENAME)); OFN.lStructSize = sizeof(OPENFILENAME); OFN.hwndOwner = hwnd; OFN.lpstrFilter = filter; OFN.lpstrFile = lpstrFile; OFN.nMaxFile = 256; OFN.lpstrInitialDir = _T("."); if (GetOpenFileName(&OFN) != 0) OutFromFile(OFN.lpstrFile, hwnd); break; } break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hwnd, iMsg, wParam, lParam); }
|
실행 결과]
'프로그램언어 > C++' 카테고리의 다른 글
API 단축키 (0) | 2020.09.28 |
---|---|
공용 대화상자 사용하기2 (0) | 2020.09.25 |
API 리소스 (0) | 2020.09.23 |
API 그리기 모드(Draw Mode) (0) | 2020.09.23 |
API 마우스 (0) | 2020.09.22 |