폼 디자인은 다음과 같이 해주시고 -
각 버튼과 에디트창의 ID는 -
- 에디트창 : IDC_EDIT1
- Open 버튼 : IDC_BUTTON1
- Write 버튼 : IDC_BUTTON2
먼저 Edit창의 속성을 변경해 줍시다. Multiline을 True로 하고, Want Return을 True로 하고, Vertical Scroll을 True로 설정합시다.
이제 에디트창에 변수를 하나 만들도록 합시다. 에디트창을 오른쪽 클릭 한 후에 변수 추가를 눌러 주세요.

보시는 바와 같이 변수 이름은 c_edit로, 범주는 Control로 해주세요.
☆ 범주를 Value로 하시면 변수 형식은 CString으로 해야 하고, 값을 입력받을 때는 UpdateData(TRUE), 값을 입력할 때는 UpdateData(FALSE)를 호출하셔야 합니다.
※ 컨트롤 변수 체크박스를 해제하시면 컨트롤과 연관된 변수가 아닌 일반변수로 선언되어 연동되지 않으므로 유의하세요!
이제 IDC_BUTTON1(Open 버튼)을 더블클릭하여 OnButtonClick 이벤트를 작성합시다.
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CString FileName;
char Filter[] = "Text File(*.txt) |*.txt|모든파일(*.*)|*.*|";
CFileDialog pDlg(TRUE, "text file(*.txt)", "*.txt", OFN_HIDEREADONLY |
OFN_FILEMUSTEXIST, Filter, NULL);
if(pDlg.DoModal() == IDOK)
{
FileName = pDlg.GetPathName();
FILE *fp = fopen(FileName, "r");
char *buf;
if(fp == NULL)
return;
fseek(fp, 0, SEEK_END);
int size = ftell(fp);
//해당 크기만큼 buf를 메모리에 설정
buf = new char[size];
memset(buf, 0, size);
fseek(fp, 0, SEEK_SET);
fread(buf, size, 1, fp);
// Win Application에서는 \r\n을 줄바꿈 문자로 인정하므로 \n을 \r\n으로 교체한다
CString data = buf;
data.Replace("\r\n", "\n");
data.Replace("\n", "\r\n");
delete buf;
fclose(fp);
c_edit.SetWindowText(data);
}
}
굵게 줄 친 CFileDialog 생성과정이 제일 중요합니다.
bOpenFileDialog : 다이어로그를 열기 전용으로 열것인가를 결정합니다. FALSE는 쓰기용으로 열기.
lpszDefExt : 기본적으로 정해질 확장자를 정합니다. 여기서는 String으로 입력받네열.
lpszFileName : 기본적으로 정해질 파일 이름을 정합니다.
dwFlags : CFileDialog의 옵션을 지정합니다. 다수의 옵션을 정할때는 or(|)플래그를 이용하시면 됩니다. 중요 옵션 몇가지를 나열하면 -
OFN_FILEMUSTEXIST : 파일이 존재하지 않으면 진행할 수 없습니다.
OFN_OVERWRITEPROMPT : 덮어쓰기 할 경우에 경고문을 안내합니다 (VB에도 이런거 있음 좋을텐데)
pParentWnd : 부모 윈도우를 설정합니다. 뭐 MFC니까 자동으로 핸들은 선택될테니 굳이 지정해 줄 필요 없음.
그리고 pDlg의 멤버변수를 보시면 GetFileName과 GetPathName 이 따로 있는데, GetFileName은 파일 이름만 전달해주지만 GetPathName은 전체 경로를 전달해줍니다. VB와 비교해서 제일 편한 점인듯.
IDC_BUTTON2(Write 버튼)을 더블클릭하여 OnButtonClick 이벤트를 작성합시다.
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CString Filename;
char Filter[] = "Text File(*.txt) |*.txt|모든파일(*.*)|*.*|";
CFileDialog pDlg(FALSE, "text file(*.txt)", "*.txt", OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT, Filter, NULL);
if (pDlg.DoModal() == IDOK)
{
Filename = pDlg.GetFileName();
FILE *fp = fopen(Filename , "w");
CString buf;
c_edit.GetWindowText(buf);
if(fp == NULL)
AfxMessageBox("파일을 생성할수 없습니다.");
fwrite(buf, buf.GetLength(), 1, fp);
fclose(fp);
}
}
설명은 위의 것과 동일합니다.
컴파일 하시면 간단한 텍스트 편집 프로그램이 완성됩니다.

생각보다 간단하네요 :D
일부 소스는 이 블로그에서 퍼왔음을 알려드립니다 : http://blog.naver.com/yjh1990/130009635358
PS. 프로그램을 실행시키면 처음에 텍스트창에 간단한 메시지가 나오는데 이 부분은 재정의 >> OnInitDialog에서 처리하였습니다.

[MFC] FileInOut.rar









