[code]
// ShapeExView.cpp : implementation of the CShapeExView class
//
#include "stdafx.h"
#include "ShapeEx.h"
#include "ShapeExDoc.h"
#include "ShapeExView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CShapeExView
IMPLEMENT_DYNCREATE(CShapeExView, CView)
BEGIN_MESSAGE_MAP(CShapeExView, CView)
//{{AFX_MSG_MAP(CShapeExView)
ON_WM_RBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CShapeExView construction/destruction
CShapeExView::CShapeExView()
{
m_bShape = TRUE;
}
CShapeExView::~CShapeExView()
{
}
BOOL CShapeExView::PreCreateWindow(CREATESTRUCT& cs)
{
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CShapeExView drawing
void CShapeExView::OnDraw(CDC* pDC)
{
CShapeExDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(m_bShape)
{
ShowRect(pDC);
ShowCircle(pDC);
ShowLine(pDC);
ShowCursorPos(pDC);
ShowRainbow(pDC);
}
else
{
m_nLine = 0;
for(int i = 20; i <= 60; i+= 5)
ShowFont(pDC, i);
}
}
/////////////////////////////////////////////////////////////////////////////
// CShapeExView diagnostics
#ifdef _DEBUG
void CShapeExView::AssertValid() const
{
CView::AssertValid();
}
void CShapeExView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CShapeExDoc* CShapeExView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShapeExDoc)));
return (CShapeExDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CShapeExView message handlers
void CShapeExView::ShowRect(CDC * pDC)
{
// 사각형 출력하기
CPen myPen, *pOldPen;
CBrush myBrush, *pOldBrush;
myPen.CreatePen(PS_SOLID, 5, RGB(0, 0, 255)); // 굵기 5 픽셀의 파란색 솔리드 펜 생성
myBrush.CreateSolidBrush(RGB(255, 255, 0)); // 노란색 솔리드 브러쉬 생성
pOldPen = pDC->SelectObject(&myPen); // 파란색 펜 선택
pOldBrush = pDC->SelectObject(&myBrush); // 노란색 브러쉬 선택
pDC->Rectangle(10, 10, 300, 200); // 사각형을 그린다.
pDC->SelectObject(pOldPen); // 기존 펜으로 환원
pDC->SelectObject(pOldBrush); // 기존 브러쉬로 환원
// 커서의 현재 위치를 출력할 프레임 그리기
CRect rc;
GetClientRect(rc);
m_rcStatus.SetRect(rc.left, rc.Height()-30, rc.right, rc.bottom);
pDC->DrawFrameControl(m_rcStatus, DFC_BUTTON|DFCS_BUTTONPUSH, 0);
}
void CShapeExView::ShowCircle(CDC * pDC)
{
// 타원 출력하기
CPen myPen, *pOldPen;
CBrush *pOldBrush;
myPen.CreatePen(PS_DOT, 1, RGB(255, 0, 0)); // 빨간색 점선 펜 생성
pOldPen = pDC->SelectObject(&myPen); // 빨간색 점선 펜 선택
pOldBrush = (CBrush*)pDC->SelectStockObject(LTGRAY_BRUSH); // 내장 브러쉬 선택
pDC->Ellipse(150, 100, 300, 300); // 타원을 그린다.
pDC->SelectObject(pOldPen); // 기존 펜으로 환원
pDC->SelectObject(pOldBrush); // 기존 브러쉬로 환원
}
void CShapeExView::ShowLine(CDC * pDC)
{
// 선 출력하기
CPen* pOldPen;
pOldPen = (CPen*)pDC->SelectStockObject(BLACK_PEN); // 내장 펜 사용
pDC->MoveTo(10, 10); // 시작점으로 이동
pDC->LineTo(300, 200); // 선을 그린다.
pDC->MoveTo(10, 200); // 시작점으로 이동
pDC->LineTo(300, 10); // 선을 그린다.
pDC->SelectObject(pOldPen); // 기존 펜으로 환원
}
void CShapeExView::ShowRainbow(CDC * pDC)
{
COLORREF color;
CPen myPen, *pOldPen;
for(int i = 0; i < 35; i+=5)
{
color = RGB(rand()%256, rand()%256, rand()%256); // 임의의 색상 설정
myPen.CreatePen(PS_SOLID, 5, color);
pOldPen = pDC->SelectObject(&myPen);
pDC->Arc(300+i, 50+i, 500-i, 260-i, 600, 160, 0, 160); // 원호를 그린다.
pDC->SelectObject(pOldPen);
myPen.DeleteObject();
}
}
void CShapeExView::ShowCursorPos(CDC * pDC)
{
CString str;
str.Format("X좌표:%3d, Y좌표:%3d", m_curPos.x, m_curPos.y);
//pDC->SetBkMode(OPAQUE); // 불투명 모드 설정(디폴트)
pDC->SetBkMode(TRANSPARENT); // 투명 모드 설정
pDC->SetTextColor(RGB(0, 0, 255)); // 텍스트 색상 설정
pDC->DrawText(str, m_rcStatus, DT_CENTER|DT_VCENTER|DT_SINGLELINE); // 텍스트를 출력한다.
}
void CShapeExView::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_bShape)
{
m_curPos = point; // 현재 커서의 위치 설정
InvalidateRect(m_rcStatus, FALSE);
}
CView::OnMouseMove(nFlags, point);
}
void CShapeExView::ShowFont(CDC * pDC, int nPoint)
{
TEXTMETRIC tm;
CFont myFont, *pOldFont;
// 폰트 생성
myFont.CreateFont(nPoint, 0, 0, 0, 700, TRUE, FALSE, 0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, "Arial");
pOldFont = pDC->SelectObject(&myFont); // 새로운 폰트 선택
pDC->SetBkMode(TRANSPARENT); // 투명 모드 설정
pDC->TextOut(10, m_nLine, "한국정보기술연구원"); // 텍스트 출력
pDC->GetTextMetrics(&tm); // 현재 화면에 출력된 텍스트의 정보 얻음
pDC->SelectObject(pOldFont); // 환원
m_nLine += (tm.tmHeight+tm.tmExternalLeading); // 문자의 전체 높이
}
void CShapeExView::OnRButtonDown(UINT nFlags, CPoint point)
{
m_bShape = !m_bShape; // 토글 형식으로 m_bShape 값이 변경된다.
Invalidate(); // 화면을 다시 그린다.
CView::OnRButtonDown(nFlags, point);
}
BOOL CShapeExView::OnEraseBkgnd(CDC* pDC)
{
// 클라이언트 영역을 변경하기
CBrush myBrush, *pOldBrush;
myBrush.CreateHatchBrush(HS_VERTICAL, RGB(0, 255, 0)); // 녹색의 수직 해칭 브러쉬 생성
pOldBrush = pDC->SelectObject(&myBrush); // 녹색 해칭브러쉬 선택
CRect rc;
GetClientRect(rc);
pDC->FillRect(rc, &myBrush); // 클라이언트 영역을 녹색 해칭 브러쉬로 채운다.
pDC->SelectObject(pOldBrush); // 기존 브러쉬로 환원
return TRUE;
//return CView::OnEraseBkgnd(pDC);
}
[/code]
// ShapeExView.cpp : implementation of the CShapeExView class
//
#include "stdafx.h"
#include "ShapeEx.h"
#include "ShapeExDoc.h"
#include "ShapeExView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CShapeExView
IMPLEMENT_DYNCREATE(CShapeExView, CView)
BEGIN_MESSAGE_MAP(CShapeExView, CView)
//{{AFX_MSG_MAP(CShapeExView)
ON_WM_RBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CShapeExView construction/destruction
CShapeExView::CShapeExView()
{
m_bShape = TRUE;
}
CShapeExView::~CShapeExView()
{
}
BOOL CShapeExView::PreCreateWindow(CREATESTRUCT& cs)
{
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CShapeExView drawing
void CShapeExView::OnDraw(CDC* pDC)
{
CShapeExDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(m_bShape)
{
ShowRect(pDC);
ShowCircle(pDC);
ShowLine(pDC);
ShowCursorPos(pDC);
ShowRainbow(pDC);
}
else
{
m_nLine = 0;
for(int i = 20; i <= 60; i+= 5)
ShowFont(pDC, i);
}
}
/////////////////////////////////////////////////////////////////////////////
// CShapeExView diagnostics
#ifdef _DEBUG
void CShapeExView::AssertValid() const
{
CView::AssertValid();
}
void CShapeExView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CShapeExDoc* CShapeExView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShapeExDoc)));
return (CShapeExDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CShapeExView message handlers
void CShapeExView::ShowRect(CDC * pDC)
{
// 사각형 출력하기
CPen myPen, *pOldPen;
CBrush myBrush, *pOldBrush;
myPen.CreatePen(PS_SOLID, 5, RGB(0, 0, 255)); // 굵기 5 픽셀의 파란색 솔리드 펜 생성
myBrush.CreateSolidBrush(RGB(255, 255, 0)); // 노란색 솔리드 브러쉬 생성
pOldPen = pDC->SelectObject(&myPen); // 파란색 펜 선택
pOldBrush = pDC->SelectObject(&myBrush); // 노란색 브러쉬 선택
pDC->Rectangle(10, 10, 300, 200); // 사각형을 그린다.
pDC->SelectObject(pOldPen); // 기존 펜으로 환원
pDC->SelectObject(pOldBrush); // 기존 브러쉬로 환원
// 커서의 현재 위치를 출력할 프레임 그리기
CRect rc;
GetClientRect(rc);
m_rcStatus.SetRect(rc.left, rc.Height()-30, rc.right, rc.bottom);
pDC->DrawFrameControl(m_rcStatus, DFC_BUTTON|DFCS_BUTTONPUSH, 0);
}
void CShapeExView::ShowCircle(CDC * pDC)
{
// 타원 출력하기
CPen myPen, *pOldPen;
CBrush *pOldBrush;
myPen.CreatePen(PS_DOT, 1, RGB(255, 0, 0)); // 빨간색 점선 펜 생성
pOldPen = pDC->SelectObject(&myPen); // 빨간색 점선 펜 선택
pOldBrush = (CBrush*)pDC->SelectStockObject(LTGRAY_BRUSH); // 내장 브러쉬 선택
pDC->Ellipse(150, 100, 300, 300); // 타원을 그린다.
pDC->SelectObject(pOldPen); // 기존 펜으로 환원
pDC->SelectObject(pOldBrush); // 기존 브러쉬로 환원
}
void CShapeExView::ShowLine(CDC * pDC)
{
// 선 출력하기
CPen* pOldPen;
pOldPen = (CPen*)pDC->SelectStockObject(BLACK_PEN); // 내장 펜 사용
pDC->MoveTo(10, 10); // 시작점으로 이동
pDC->LineTo(300, 200); // 선을 그린다.
pDC->MoveTo(10, 200); // 시작점으로 이동
pDC->LineTo(300, 10); // 선을 그린다.
pDC->SelectObject(pOldPen); // 기존 펜으로 환원
}
void CShapeExView::ShowRainbow(CDC * pDC)
{
COLORREF color;
CPen myPen, *pOldPen;
for(int i = 0; i < 35; i+=5)
{
color = RGB(rand()%256, rand()%256, rand()%256); // 임의의 색상 설정
myPen.CreatePen(PS_SOLID, 5, color);
pOldPen = pDC->SelectObject(&myPen);
pDC->Arc(300+i, 50+i, 500-i, 260-i, 600, 160, 0, 160); // 원호를 그린다.
pDC->SelectObject(pOldPen);
myPen.DeleteObject();
}
}
void CShapeExView::ShowCursorPos(CDC * pDC)
{
CString str;
str.Format("X좌표:%3d, Y좌표:%3d", m_curPos.x, m_curPos.y);
//pDC->SetBkMode(OPAQUE); // 불투명 모드 설정(디폴트)
pDC->SetBkMode(TRANSPARENT); // 투명 모드 설정
pDC->SetTextColor(RGB(0, 0, 255)); // 텍스트 색상 설정
pDC->DrawText(str, m_rcStatus, DT_CENTER|DT_VCENTER|DT_SINGLELINE); // 텍스트를 출력한다.
}
void CShapeExView::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_bShape)
{
m_curPos = point; // 현재 커서의 위치 설정
InvalidateRect(m_rcStatus, FALSE);
}
CView::OnMouseMove(nFlags, point);
}
void CShapeExView::ShowFont(CDC * pDC, int nPoint)
{
TEXTMETRIC tm;
CFont myFont, *pOldFont;
// 폰트 생성
myFont.CreateFont(nPoint, 0, 0, 0, 700, TRUE, FALSE, 0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, "Arial");
pOldFont = pDC->SelectObject(&myFont); // 새로운 폰트 선택
pDC->SetBkMode(TRANSPARENT); // 투명 모드 설정
pDC->TextOut(10, m_nLine, "한국정보기술연구원"); // 텍스트 출력
pDC->GetTextMetrics(&tm); // 현재 화면에 출력된 텍스트의 정보 얻음
pDC->SelectObject(pOldFont); // 환원
m_nLine += (tm.tmHeight+tm.tmExternalLeading); // 문자의 전체 높이
}
void CShapeExView::OnRButtonDown(UINT nFlags, CPoint point)
{
m_bShape = !m_bShape; // 토글 형식으로 m_bShape 값이 변경된다.
Invalidate(); // 화면을 다시 그린다.
CView::OnRButtonDown(nFlags, point);
}
BOOL CShapeExView::OnEraseBkgnd(CDC* pDC)
{
// 클라이언트 영역을 변경하기
CBrush myBrush, *pOldBrush;
myBrush.CreateHatchBrush(HS_VERTICAL, RGB(0, 255, 0)); // 녹색의 수직 해칭 브러쉬 생성
pOldBrush = pDC->SelectObject(&myBrush); // 녹색 해칭브러쉬 선택
CRect rc;
GetClientRect(rc);
pDC->FillRect(rc, &myBrush); // 클라이언트 영역을 녹색 해칭 브러쉬로 채운다.
pDC->SelectObject(pOldBrush); // 기존 브러쉬로 환원
return TRUE;
//return CView::OnEraseBkgnd(pDC);
}
[/code]
'Windows > MFC' 카테고리의 다른 글
ImageView 이미지 (0) | 2013.10.02 |
---|---|
OnNcCreate 삼각,둥근 윈도우 (0) | 2013.10.02 |
brush (0) | 2013.10.02 |
도형그리기 (CPen, CBrush, Rectangle, Arc, LineTo, Ellipse) (0) | 2013.10.02 |
시스템 폰트 얻기 system font (0) | 2013.10.02 |