天天看点

MFC对话框,复选框,单选钮画图

创建一个画图界面

MFC对话框,复选框,单选钮画图

首先将控件都绑定控件变量

然后在初始化函数BOOL CCRdemoDlg::OnInitDialog()中添加初始化信息CheckRadioButton(IDC_RD_RECT,IDC_RD_ROUND,IDC_RD_ROUND)

函数功能:该函数给一组单选按钮中的一个指定按钮加上选中标志,并且清除组中其他按钮的选中标志。 函数原型:BOOL CheckRadioButton(HWND hDlg, int nlDFirstButton, int nlDLastBUtton, int nlDCheckButton); 参数: hDlg:指向包含单选按钮的对话框的句柄。 nlDFirstButton:指定组中第1个 单选按钮的标识符。 nlDLastButton:指定组中最后一个单选按钮的标识符。 nlDCheckButton:指出要选中的那个单选按钮的标识符。 返回值:如果函数执行成功,返回值非零;如果失败,则返回零。若想获取更多 错误信息,请调用GetLastError函数。 然后需要用到对话框属性中消息函数的擦除背景消息函数

BOOL CCRdemoDlg::OnEraseBkgnd(CDC* pDC) //擦除背景函数
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值


	BOOL bRet= CDialogEx::OnEraseBkgnd(pDC);
	int nRed,nGreen,nBlue;
	nRed=m_chk_red.GetCheck()?255:0;
	nGreen=m_chk_green.GetCheck()?255:0;
	nBlue=m_chk_blue.GetCheck()?255:0;
	COLORREF crFore=RGB(nRed,nGreen,nBlue);      //组合成新的颜色,用来画图的前景色
	CBrush brush;               //创建刷子,实心,然后用这个刷子来画图
	brush.CreateSolidBrush(crFore);
	CBrush *pOldBrush=pDC->SelectObject(&brush);  //先把刷子选入dc,dc里原来旧的刷子用一个指针保留下来
	RECT rc={50,20,150,120};
	if(m_rd_rect.GetCheck())
	{
		pDC->Rectangle(&rc);         //画矩形
	}
	else
		pDC->Ellipse(&rc);
	pDC->SelectObject(pOldBrush);      //把旧的画刷放回去

	return bRet;
		
}
           

对蓝色选择框的程序,添加事件( 单击):

void CCRdemoDlg::OnBnClickedChkBlue()
{
	// TODO: 在此添加控件通知处理程序代码
	Invalidate();//失效,重新绘制对话框,失效以后就擦除背景,也就是执行上面的函数

}
           

其他选择框分别调用OnBnClickedChkBlue();函数即可