mfc_graph_advance_2 - 8BitsCoding/RobotMentor GitHub Wiki
이번강좌에서 만들어볼 사항
// Dlg.h
CImage m_image;
CDC m_image_dc;
CPen m_green_pen;
CBrush m_green_brush;
CRect m_rect;
char m_is_clicked = 0;
CPoint m_start_point;
// OnInitDialog
GetClientRect(m_rect);
m_image.Create(m_rect.Width(), m_rect_Height(), 32);
m_image_dc.Attach(m_image.GetDC());
m_green_pen.CreatePen(PS_SOLID, 1, RGB(100, 255, 100));
m_green_brush.CreateSlidBrush(RGB(0, 160, 0));
SetBackgroundColor(RGB(0, 0, 0));
// OnDestroy
m_image_dc.Detach();
m_image.Release();
m_green_pen.DeleteObject();
m_green_brush.DeleteObject();
// OnPaint
CPaintDC dc(this);
if(IsIconic()) // ...
else {
m_image.Draw(dc, 0, 0);
}
// LBUTTON_DOWN
m_is_clicked = 1;
m_start_point = point;
// LBUTTON_UP
m_is_clicked = 0;
// MOUSE MOVE
if(m_is_clicked == 1) {
m_image_dc.FillSolidRect(m_rect, RGB(0, 0, 0));
m_image_dc.SelectObject(&m_green_pen);
m_image_dc.MoveTo(m_start_pos);
m_image_dc.LineTo(point);
Invalidate(FALSE);
}
else {
}
화살표 머리를 만들어보자. - 1
// MOUSE MOVE
if(m_is_clicked == 1) {
m_image_dc.FillSolidRect(m_rect, RGB(0, 0, 0));
m_image.SelectStockObject(NULL_BRUSH);
m_image_dc.SelectObject(&m_green_pen);
m_image_dc.Ellipse(point.x - 50, point.y - 50, point.x + 50, point.y + 50);
m_image_dc.MoveTo(m_start_pos);
m_image_dc.LineTo(point);
Invalidate(FALSE);
}
else {
}
화살표 머리를 만들어보자. - 2
// MOUSE MOVE
if(m_is_clicked == 1) {
m_image_dc.FillSolidRect(m_rect, RGB(0, 0, 0));
m_image.SelectStockObject(NULL_BRUSH);
m_image_dc.SelectObject(&m_green_pen);
m_image_dc.Ellipse(point.x - 50, point.y - 50, point.x + 50, point.y + 50);
m_image_dc.MoveTo(m_start_pos);
m_image_dc.LineTo(point);
POINT pos_list[3];
pos_list[0].x = point.x;
pos_list[0].y = point.y;
double radian = atan2(m_start_pos.y - point.y, point.x - m_start_pos.x);
pos_list[1].x = (int)(cos(radian + 5.0/6.0*PI) * 50) + point.x;
pos_list[1].y = (int)(sin(radian + 5.0/6.0*PI) * -50 )+ point.y;
pos_list[2].x = (int)(cos(radian + 7.0/6.0*PI) * 50) + point.x;
pos_list[2].y = (int)(sin(radian + 7.0/6.0*PI) * -50) + point.y;
m_image_dc.Ploygon(pos_list, 3);
Invalidate(FALSE);
}
else {
}
화살표 머리를 만들어보자. - 3
// MOUSE MOVE
if(m_is_clicked == 1) {
m_image_dc.FillSolidRect(m_rect, RGB(0, 0, 0));
//m_image.SelectStockObject(NULL_BRUSH);
m_image_dc.SelectObject(&m_green_pen);
//m_image_dc.Ellipse(point.x - 50, point.y - 50, point.x + 50, point.y + 50);
m_image_dc.MoveTo(m_start_pos);
m_image_dc.LineTo(point);
POINT pos_list[3];
pos_list[0].x = point.x;
pos_list[0].y = point.y;
double radian = atan2(m_start_pos.y - point.y, point.x - m_start_pos.x);
pos_list[1].x = (int)(cos(radian + 5.0/6.0*PI) * 50) + point.x;
pos_list[1].y = (int)(sin(radian + 5.0/6.0*PI) * -50 )+ point.y;
pos_list[2].x = (int)(cos(radian + 7.0/6.0*PI) * 50) + point.x;
pos_list[2].y = (int)(sin(radian + 7.0/6.0*PI) * -50) + point.y;
m_image_dc.SelectObject(&m_greem_brush);
m_image_dc.Ploygon(pos_list, 3);
Invalidate(FALSE);
}
else {
}