GDI(4)-색상

유혜정·2022년 4월 14일
0

----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);
}

윈도우 ReSize 안해도 색상 변경하기

----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));
}

profile
내가 시작한 공부, 공유할 코드

0개의 댓글