mfc_Paint_2 - 8BitsCoding/RobotMentor GitHub Wiki
์ง์ , ๋ค๋ชจ ๊ทธ๋ฆฌ๊ธฐ
๋ผ๋์ค ๋ฒํผ์ ํตํด์ ์์ ์ ๊ทธ๋ฆฌ๊ธฐ, ์ง์ ๊ทธ๋ฆฌ๊ธฐ, ๋ค๋ชจ ๊ทธ๋ฆฌ๊ธฐ ์ธ์ง ์ง์ ํ ์ ์๊ฒ ๋ณ๊ฒฝํ์.
// Dlg.h
CButton m_pen_radio;
CButton m_line_radio;
CButton m_rect_radiao;
// OnInitDialog()
m_pen_radio.SetCheck(1);
// OnClickPEN
m_draw_wnd.SetDrawType(PEN_MODE);
// OnClickLINE
m_draw_wnd.SetDrawType(LINE_MODE);
// OnClickRECT
m_draw_wnd.SetDrawType(RECT_MODE);
// DrawWnd.h
#define PEN_MODE
#define LINE_MODE
#define RECT_MODE
private:
char m_draw_type = 1; // 1-์ฐํ / 2-์ / 3-์ฌ๊ฐํ
public:
void SetDrawType(char a_type) {
m_draw_type = a_type;
}
// DrawWnd::MOUSE_MOVE
if(m_is_clicked == 1) {
CClientDC dc(this);
if(m_draw_type == PEN_MODE) {
HDC h_image_dc = m_image.GetDC();
CDC * p_image_dc = CDC::FromHandle(h_image_dc);
p_image_dc.MoveTo(m_prev_point); // ์์ ์
p_image_dc.LineTo(point); // ๋ ์
m_prev_point = point;
m_image.ReleaseDC();
m_image.Draw(dc, 0, 0);
} else if(m_draw_type == LINE_MODE) {
m_image.Draw(dc, 0, 0);
dc.MoveTo(m_prev_point); // ์์ ์
dc.LineTo(point); // ๋ ์
} else if(m_draw_type == RECT_MODE) {
m_image.Draw(dc, 0, 0);
CGdiObject *p_old_brush = dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(m_prev_point.x, m_prev_point.y, point.x, point.y);
dc.SelectObject(p_old_brush);
} else {
}
}
else {
}
// LBUTTON UP
if(m_is_clicked) {
if(m_draw_type == LINE_MODE) {
CDC * p_image_dc = CDC::FromHandle(m_image_GetDC());
p_image_dc->MoveTo(m_prev_point);
p_image_dc->LineTo(point);
p_image.ReleaseDC();
} else if (m_draw_type == RECT_MODE) {
CDC * p_image_dc = CDC::FromHandle(m_image_GetDC());
CGdiObject *p_old_brush = p_image_dc->SelectStockObject(NULL_BRUSH);
p_image_dc->Rectangle(m_prev_point.x, m_prev_point.y, point.x, point.y);
p_image_dc->SelectObject(p_old_brush);
p_image.ReleaseDC();
}
m_is_clicked = 0;
ReleaseCapture();
}
์ ๊ณผ ๋ค๋ชจ๋ฅผ ๊ทธ๋ฆด๋ ๊น๋นก์์ ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด??
private:
CImage m_image, m_temp_image;
m_temp_image๋ฅผ ์ถ๊ฐ
// OnCreate
CRect r;
GetClientRect(r);
m_image.Create(r.Width(), r.Height(), 32);
m_temp_image.Create(r.Width(), r.Height(), 32);
CDC * p_image_dc = CDC::FromHandle(m_image.GetDC());
p_image_dc->Rectangle(r);
m_image.ReleaseDC();
// DrawWnd::MOUSE_MOVE
if(m_is_clicked == 1) {
CClientDC dc(this);
if(m_draw_type == PEN_MODE) {
HDC h_image_dc = m_image.GetDC();
CDC * p_image_dc = CDC::FromHandle(h_image_dc);
p_image_dc.MoveTo(m_prev_point); // ์์ ์
p_image_dc.LineTo(point); // ๋ ์
m_prev_point = point;
m_image.ReleaseDC();
m_image.Draw(dc, 0, 0);
} else if(m_draw_type == LINE_MODE) {
CDC * p_temp_dc = CDC::FromHandle(m_temp_image.GetDC());
m_image.Draw(*p_temp_dc, 0, 0);
p_temp_dc->MoveTo(m_prev_point); // ์์ ์
p_temp_dc->LineTo(point); // ๋ ์
m_temp_image.ReleaseDC();
m_temp_image.Draw(dc, 0, 0);
} else if(m_draw_type == RECT_MODE) {
CDC * p_temp_dc = CDC::FromHandle(m_temp_image.GetDC());
m_image.Draw(*p_temp_dc, 0, 0);
CGdiObject *p_old_brush = p_temp_dc->SelectStockObject(NULL_BRUSH);
p_temp_dc->Rectangle(m_prev_point.x, m_prev_point.y, point.x, point.y);
p_temp_dc->SelectObject(p_old_brush);
m_temp_image.ReleaseDC();
m_temp_image.Draw(dc, 0, 0);
} else {
}
}
else {
}