一新建一个工程
二 增加两个分组框(Group Box)
改名为颜色和形状
三 增加三个复选框(Check Box)
四 增加两个单选框(Radio Button)
注意单选按键的TAB键顺序必须是连续的
查看方法:格式->TAB键顺序 就可以查看
五 按键 更改ID
分别为IDC_CHK_RED, IDC_CHK_GREEN, IDC_CHK_BLUE,
IDC_RD_RECT, IDC_RD_ROUND
六给控件添加变量
三个分别为 m_chk_red,m_chk_green,m_chk_blue
另外两个分别为 m_rd_rect, m_rd_round
七其进行代码编辑
添加初始化代码
增加一条
CheckRadioButton(IDC_RD_RECT, IDC_RD_ROUND, IDC_RD_ROUND);
三个函数的意思是,从第一个参数到第二个但是选择第三个参数。
打开后就默认选择的圆形。
添加事件处理程序
会看到新增加了一个函数
void CAboutDlg::OnBnClickedChkBlue()
{
// TODO: 在此添加控件通知处理程序代码
}
添加
void CMFCRBdemoDlg::OnBnClickedChkBlue()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();//失效,会重新绘制对话框,擦除背景
}
点击对话框
消息里面选择擦除背景。
找到WM_ERASEBKGND,添加
BOOL CMFCRBdemoDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return CDialogEx::OnEraseBkgnd(pDC);
}
添加代码如下
void CMFCRBdemoDlg::OnBnClickedRdRound()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
}
//这里擦除了背景,在这里添加绘制函数
BOOL CMFCRBdemoDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
BOOL bRet = CDialogEx::OnEraseBkgnd(pDC);
int nRed, nGreen, nBlue;
nRed = m_chk_red.GetCheck() ? 255 : 0; //如果红色复选框被选中,那么红色调整为255,否则为0
nGreen = m_chk_green.GetCheck() ? 255 : 0; //如果绿色复选框被选中,那么绿色调整为255,否则为0
nBlue = m_chk_blue.GetCheck() ? 255 : 0; //如果蓝色复选框被选中,那么蓝色调整为255,否则为0
COLORREF crFore = RGB(nRed,nGreen,nBlue); //RGB 三个颜色进行组合
CBrush brush; //创建一个刷子
brush.CreateSolidBrush(crFore); //使用这个颜色创建一个实心刷子
CBrush* pOldBrush = pDC->SelectObject(&brush); //保存当前刷子
RECT rc = { 100,20,200,120 }; //X起始坐标,Y起始坐标,X终止坐标,Y终止坐标
if (m_rd_round.GetCheck()) //如果圆形被选中
{
pDC->Ellipse(&rc); //绘制圆形
}
else
{
pDC->Rectangle(&rc); //绘制矩形
}
pDC->SelectObject(pOldBrush); //把之前的刷子赋值回去
return bRet;
}
void CMFCRBdemoDlg::OnBnClickedChkBlue()
{
// TODO: 在此添加控件通知处理程序代码
Invalidate();//失效,会重新绘制对话框,擦除背景
}
void CMFCRBdemoDlg::OnBnClickedChkGreen()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
}
void CMFCRBdemoDlg::OnBnClickedChkRed()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
}
void CMFCRBdemoDlg::OnBnClickedRdRect()
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChkBlue();
}
运行效果图