mfc_dot_edit - 8BitsCoding/RobotMentor GitHub Wiki


// Dlg.h
COLORREF m_dot_color[Y_COUNT][X_COUNT];
CPen m_grid_pen;
COLORREF m_left_color, m_right_color;
CRect m_left_rect, m_right_rect;
CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_MFCAPPLICATION2_DIALOG, pParent),
	m_grid_pen(PS_SOLID, 1, RGB(220, 220, 220))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	for (int y = 0; y < Y_COUNT; y++) {
		for (int x = 0; x < X_COUNT; x++) {
			m_dot_color[y][x] = RGB(255, 255, 255);
		}
	}

	m_left_color = RGB(0, 0, 255);
	m_right_color = RGB(255, 255, 255);
}
BOOL CMFCApplication2Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 이 λŒ€ν™” μƒμžμ˜ μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.  μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ μ£Ό 창이 λŒ€ν™” μƒμžκ°€ 아닐 κ²½μš°μ—λŠ”
	//  ν”„λ ˆμž„μ›Œν¬κ°€ 이 μž‘μ—…μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
	SetIcon(m_hIcon, TRUE);			// 큰 μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.
	SetIcon(m_hIcon, FALSE);		// μž‘μ€ μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.

	// TODO: 여기에 μΆ”κ°€ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.
	 GetDlgItem(IDC_LEFT_COLOR_BTN)->GetWindowRect(&m_left_rect);
	 ScreenToClient(m_left_rect);

	 m_left_rect.left -= 10;
	 m_left_rect.right = m_left_rect.left + 5;

	 GetDlgItem(IDC_RIGHT_COLOR_BTN)->GetWindowRect(&m_right_rect);
	 ScreenToClient(m_right_rect);

	 m_right_rect.left -= 10;
	 m_right_rect.right = m_right_rect.left + 5;

	return TRUE;  // 포컀슀λ₯Ό μ»¨νŠΈλ‘€μ— μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ TRUEλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
}
void CMFCApplication2Dlg::OnPaint()
{
	CPaintDC dc(this); // 그리기λ₯Ό μœ„ν•œ λ””λ°”μ΄μŠ€ μ»¨ν…μŠ€νŠΈμž…λ‹ˆλ‹€.

	if (IsIconic())
	{
        // ...
	}
	else
	{
		CPen * p_old_pen = dc.SelectObject(&m_grid_pen);
		CBrush * p_old_brush = dc.GetCurrentBrush();
		// CBrush temp_brush;

		dc.SelectStockObject(DC_BRUSH);

		for (int y = 0; y < Y_COUNT; y++) {
			for (int x = 0; x < X_COUNT; x++) {
				if (dc.GetDCBrushColor() != m_dot_color[y][x]) {
					dc.SetDCBrushColor(m_dot_color[y][x]);
				}
				//temp_brush.CreateSolidBrush(m_dot_color[y][x]);
				//dc.SelectObject(&temp_brush);
				dc.Rectangle(x*RECT_INTERVAL, y*RECT_INTERVAL, 
					RECT_INTERVAL +1+x* RECT_INTERVAL, 
					RECT_INTERVAL +1+y* RECT_INTERVAL);
				//temp_brush.DeleteObject();
			}
		}

		dc.SetDCBrushColor(m_left_color);
		dc.Rectangle(m_left_rect);

		dc.SetDCBrushColor(m_right_color);
		dc.Rectangle(m_right_rect);

		dc.SelectObject(p_old_pen);
		dc.SelectObject(p_old_brush);
		// CDialogEx::OnPaint();
	}
}
void CMFCApplication2Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
	if (nFlags & (MK_LBUTTON |MK_RBUTTON)) {
		int x = point.x / RECT_INTERVAL;
		int y = point.y / RECT_INTERVAL;

		if (x < X_COUNT && y < Y_COUNT) {

			if (nFlags&MK_LBUTTON) {
				m_dot_color[y][x] = m_left_color;
			}
			else {
				m_dot_color[y][x] = m_right_color;
			}
			CClientDC dc(this);

			CPen * p_old_pen = dc.SelectObject(&m_grid_pen);
			CGdiObject * p_old_brush = dc.SelectStockObject(DC_BRUSH);
			
			dc.SetDCBrushColor(m_dot_color[y][x]);
			dc.Rectangle(x*RECT_INTERVAL, y*RECT_INTERVAL,
						RECT_INTERVAL + 1 + x * RECT_INTERVAL,
						RECT_INTERVAL + 1 + y * RECT_INTERVAL);

			dc.SelectObject(p_old_pen);
			dc.SelectObject(p_old_brush);
		}
	}

	CDialogEx::OnMouseMove(nFlags, point);
}
void CMFCApplication2Dlg::OnBnClickedLeftColorBtn()
{
	CColorDialog ins_dlg;

	ins_dlg.m_cc.Flags = ins_dlg.m_cc.Flags | CC_FULLOPEN | CC_RGBINIT;
	ins_dlg.m_cc.rgbResult = m_left_color;

	if (IDOK == ins_dlg.DoModal())
	{
		m_left_color = ins_dlg.GetColor();
		InvalidateRect(m_left_rect, FALSE);
	}
}


void CMFCApplication2Dlg::OnBnClickedRightColorBtn()
{
	CColorDialog ins_dlg;

	ins_dlg.m_cc.Flags = ins_dlg.m_cc.Flags | CC_FULLOPEN| CC_RGBINIT;
	ins_dlg.m_cc.rgbResult = m_right_color;

	if (IDOK == ins_dlg.DoModal())
	{
		m_right_color = ins_dlg.GetColor();
		InvalidateRect(m_right_rect, FALSE);
	}
}