----doc.h
// 작업입니다.
public:
vector<CPoint> m_array;
COLORREF m_color; // 색상에 대한 변수
----doc.cpp
void CReDrawDemoView::OnDraw(CDC* pDC)
{
CReDrawDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
CPen pen(PS_SOLID, 10, pDoc->m_linecolor);
// 펜스타일, 굵기, 색상
CPen* pOldPen = pDC->SelectObject(&pen);
if (pDoc->m_array.size() > 0) {
const CPoint& pt = pDoc->m_array[0];
pDC->MoveTo(pt.x, pt.y);
for (const CPoint& pt : pDoc->m_array) {
pDC->LineTo(pt.x, pt.y);
}
}
//CBrush brush(RGB(0, 0, 0));
CBrush brush(HS_CROSS, RGB(0, 0, 0)); // 격자모양
CBrush* pOldBrush = pDC->SelectObject(&brush);
pDC->Rectangle(100, 100, 200, 200);
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen); // 원래대로 변경
}
----doc.cpp
void CReDrawDemoDoc::OnColorBlue()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
m_linecolor = RGB(0, 255, 0);
}
----doc.cpp
#include "ReDrawDemoView.h" // 헤더 추가 필수
#include "MainFrm.h"
void CReDrawDemoDoc::OnColorBlue()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
m_linecolor = RGB(0, 0, 255);
// 방법 1
// ((CReDrawDemoView*)m_viewList.GetHead())->Invalidate(); // 강제 형변환
// 방법 2
// ((CMainFrame*)AfxGetMainWnd())->GetActiveView()->Invalidate();
// 방법 3
UpdateAllViews(NULL); // 모든 view에서 호출(1개의 view아니라 모든 view를 호출함)
}
----doc.cpp
void CReDrawDemoDoc::OnUpdateColorBlue(CCmdUI* pCmdUI)
{
// TODO: 여기에 명령 업데이트 UI 처리기 코드를 추가합니다.
pCmdUI->SetCheck(m_linecolor == RGB(0, 0, 255));
}