实现颜色与图形变换的例子:
/*
D:\Visual_Studio_repos\MFC\2*/
void CMFCApplication2Dlg::OnBnClickedCheck3()
{
    Invalidate(); //重写绘图,会调用OnEraseBkgnd事件
}
BOOL CMFCApplication2Dlg::OnEraseBkgnd(CDC* pDC)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    bool ret =  CDialogEx::OnEraseBkgnd(pDC);
    
    //定义颜色变量
    int rgb_red, rgb_green, rgb_blue;
    
    rgb_red = chk_red.GetCheck() ? 255 : 0;
    rgb_green = chk_green.GetCheck() ? 255 : 0;
    rgb_blue = chk_blue.GetCheck() ? 255 : 0;
    COLORREF m_Color = RGB(rgb_red, rgb_green, rgb_blue);
    CBrush brush;
    CBrush *OldBrush;
    brush.CreateStockObject(m_Color);
    OldBrush = pDC->SelectObject(&brush); //保存默认的的画刷, 之后进行恢复,作用避免内存泄露
    RECT rect = {50,20,200,180};
        //绘图
    if (r_rect.GetCheck()) {
        pDC->Rectangle(&rect);
    }
    else {
        pDC->Ellipse(&rect);
    }
    
    pDC->SelectObject(OldBrush); //恢复老的画刷,避免内存泄露
    return ret;
}

原文:https://www.cnblogs.com/zpchcbd/p/12272846.html