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