23.10.26 (목) 28일차
텍스트 파일, 바이너리 파일
텍스트 파일 : 문자만 있는 것
바이너리 파일 : 미디어도 포함
C에는 없고 C++에만 있는 것이 예외 처리 (try - throw - catch)
새 프로젝트 만들기 한 후 mfc 앱 선택
단일 문서 선택
MFC standard로 바꿔주기
LPCREATESTRUCT
LP: Long Pinter
Create struct : 구조체 만듬
// MFC1View.cpp
// CMFC1View 그리기
void CMFC1View::OnDraw(CDC* pDC)
{
CMFC1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
CString test = _T("Hello MFC SDI GDI interface test!!.");
pDC->TextOut(0, 0, test);
}
가로 세로 크기 출력
void CMFC1View::OnDraw(CDC* pDC)
{
CMFC1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
CString test = _T("Hello MFC SDI GDI interface test!!.");
pDC->TextOut(0, 0, test);
test.Format(_T("HORZRES(가로크기)=%d"),
pDC->GetDeviceCaps(HORZRES));
pDC->TextOut(0, 20, test);
test.Format(_T("VERTRES(세로크기)=%d"),
pDC->GetDeviceCaps(VERTRES));
pDC->TextOut(0, 40, test);
}
글자 위치 지정
void CMFC1View::OnDraw(CDC* pDC)
{
CMFC1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
CString test = _T("Hello MFC SDI GDI interface test!!.");
pDC->TextOut(0, 0, test);
test.Format(_T("HORZRES(가로크기)=%d"),
pDC->GetDeviceCaps(HORZRES));
pDC->TextOut(0, 20, test);
test.Format(_T("VERTRES(세로크기)=%d"),
pDC->GetDeviceCaps(VERTRES));
pDC->TextOut(0, 40, test);
test = _T("DrawText Example");
CRect rect = CRect(0, 60, 400, 100);
pDC->DrawText(test, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
글자와 백그라운드 색깔 지정하기
void CMFC1View::OnDraw(CDC* pDC)
{
CMFC1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
CString test = _T("Hello MFC SDI GDI interface test!!.");
pDC->TextOut(0, 0, test);
test.Format(_T("HORZRES(가로크기)=%d"),
pDC->GetDeviceCaps(HORZRES));
pDC->TextOut(0, 20, test);
test.Format(_T("VERTRES(세로크기)=%d"),
pDC->GetDeviceCaps(VERTRES));
pDC->TextOut(0, 40, test);
test = _T("DrawText Example");
CRect rect = CRect(0, 60, 400, 100);
pDC->DrawText(test, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
test = _T("ExtTextOut Example");
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkColor(RGB(255, 255, 0));
pDC->ExtTextOut(0, 120, ETO_CLIPPED | ETO_OPAQUE, CRect(0, 120, 400, 200), test, NULL);
}
글자 폰트 바꾸기
void CMFC1View::OnDraw(CDC* pDC)
{
CMFC1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
CFont cFont, * oldFont;
//폰트를 만든다.
cFont.CreateFont(10, 10,//v,h size
0, 0,//angle
FW_DONTCARE,//bold
FALSE,//italic
FALSE,//under line
FALSE,//STRIKEOUT plug
DEFAULT_CHARSET,//CHAR SET
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH, _T("돋움체"));
//oldFont backup
oldFont = pDC->SelectObject(&cFont);
CString test = _T("Hello MFC SDI GDI interface test!!.");
pDC->TextOut(0, 0, test);
test.Format(_T("HORZRES(가로크기)=%d"),
pDC->GetDeviceCaps(HORZRES));
pDC->TextOut(0, 20, test);
test.Format(_T("VERTRES(세로크기)=%d"),
pDC->GetDeviceCaps(VERTRES));
pDC->TextOut(0, 40, test);
test = _T("DrawText Example");
CRect rect = CRect(0, 60, 400, 100);
pDC->DrawText(test, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
test = _T("ExtTextOut Example");
pDC->SetTextColor(RGB(255, 0, 0));
pDC->SetBkColor(RGB(255, 255, 0));
pDC->ExtTextOut(0, 120, ETO_CLIPPED | ETO_OPAQUE, CRect(0, 120, 400, 200), test, NULL);
}
메뉴 생성 - 박스 그리기 만들기
속성 창에서 수정
함수와 연결하기
클래스 마법사에서 클래스 이름을 CSDIIView로 설정하고, 만들어 놓은 ID_Drawbox를 더블 클릭해 확인을 누른다.
실행 후 파일 버튼을 누르고 박스 그리기를 클릭하면 박스가 그려짐
// SDIIView.cpp
void CSDIIView::OnDrawbox()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
CDC* pDC = GetDC();//DC를 얻고
pDC->Rectangle(CRect(0, 0, 100, 100));//박스를 그린다음
ReleaseDC(pDC);//DC해제
}
박스 색깔 바꾸기
void CSDIIView::OnDrawbox()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
CPen cPen, * oldPen;
cPen.CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
CDC* pDC = GetDC();
oldPen = pDC->SelectObject(&cPen);
pDC->Rectangle(CRect(0, 0, 100, 100));
pDC->SelectObject(oldPen);
cPen.DeleteObject();
ReleaseDC(pDC);
}
박스 안쪽도 색깔 변경하기
void CSDIIView::OnDrawbox()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
CPen cPen, * oldPen;
cPen.CreatePen(PS_SOLID, 2, RGB(0, 0, 255));
CBrush cBrush, * oldBrush;
cBrush.CreateSolidBrush(RGB(255, 255, 0));
CDC* pDC = GetDC();//DC를 얻고
oldPen = pDC->SelectObject(&cPen);
oldBrush = pDC->SelectObject(&cBrush);
pDC->Rectangle(CRect(0, 0, 100, 100));//박스를 그린다음
pDC->SelectObject(oldBrush);
cBrush.DeleteObject();
pDC->SelectObject(oldPen);
cPen.DeleteObject();
ReleaseDC(pDC);//DC해제
}
키 누르면 감지
프로젝트 생성
클래스 마법사 설정
// MsgView.cpp
void CMsgView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
AfxMessageBox(_T("Key Pressed"));
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
아스키 키 누르면 출력하기
void CMsgView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CString temp;
temp.Format(_T(" %c key press!!"), nChar);
AfxMessageBox(temp);
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
마우스 왼쪽 클릭 감지
클래스 마법사 설정
void CMsgView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
AfxMessageBox(_T("Mouse Left Button click"));
CView::OnLButtonDown(nFlags, point);
}
마우스 오른쪽 클릭 감지
클래스 마법사 설정
void CMsgView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
AfxMessageBox(_T("마우스 오른쪽 클릭"));
CView::OnRButtonDown(nFlags, point);
}
실행 취소 버튼 감지
클래스 마법사 설정
void CMsgView::OnEditUndo()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
AfxMessageBox(_T("Select the Menu Undo Item"));
}