03_WM_ERASEBKGND窗口重绘消息

窗口重绘消息WM_ERASEBKGND

利用此消息可以由Invalidate() 方法,让窗口发送WM_ERASEBKGND 消息,从而进行窗口重绘处理,实现客户曲绘图更新。

void CPaintPracticeDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
    
    //控件和CPaintPracticeDlg类属性绑定
	DDX_Control(pDX, IDC_CHECK_RED, m_chk_red);
	DDX_Control(pDX, IDC_CHECK_GREEN, m_chk_green);
	DDX_Control(pDX, IDC_CHECK_BLUE, m_chk_blue);
	DDX_Control(pDX, IDC_RADIO_SQURAE, m_rd_squ);
	DDX_Control(pDX, IDC_RADIO_CIRC, m_rd_circ);
}



BEGIN_MESSAGE_MAP(CPaintPracticeDlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//复选按钮ID = IDC_CHECK_RED|IDC_CHECK_GREEN|IDC_CHECK_BLUE 按钮被点击BN_CLICKED的消息,由CPaintPracticeDlg类成员方法处理
	ON_BN_CLICKED(IDC_CHECK_RED, &CPaintPracticeDlg::OnBnClickedCheckRed)
	ON_BN_CLICKED(IDC_CHECK_GREEN, &CPaintPracticeDlg::OnBnClickedCheckGreen)
	ON_BN_CLICKED(IDC_CHECK_BLUE, &CPaintPracticeDlg::OnBnClickedCheckBlue)
	
	//单选按钮ID=IDC_RADIO_SQURAE|IDC_RADIO_CIRC按钮被点击BN_CLICKED的消息,由CPaintPracticeDlg类成员方法处理
	ON_BN_CLICKED(IDC_RADIO_SQURAE, &CPaintPracticeDlg::OnBnClickedRadioSqurae)
	ON_BN_CLICKED(IDC_RADIO_CIRC, &CPaintPracticeDlg::OnBnClickedRadioCirc)
   
    //CPaintPracticeDlg窗口在具体绘制之前,会发送WM_ERASEBKGND消息通知该窗口檫除背景,由OnEraseBkgnd处理
	ON_WM_ERASEBKGND()
END_MESSAGE_MAP()


void CPaintPracticeDlg::OnBnClickedCheckRed()
{
	// TODO: 在此添加控件通知处理程序代码
	OnBnClickedCheckBlue();
}


void CPaintPracticeDlg::OnBnClickedCheckGreen()
{
	// TODO: 在此添加控件通知处理程序代码
	OnBnClickedCheckBlue();
}


void CPaintPracticeDlg::OnBnClickedCheckBlue()
{
	// TODO: 在此添加控件通知处理程序代码

	//让对话框重汇对话框
	Invalidate();
}


void CPaintPracticeDlg::OnBnClickedRadioSqurae()
{
	// TODO: 在此添加控件通知处理程序代码
	OnBnClickedCheckBlue();
}


void CPaintPracticeDlg::OnBnClickedRadioCirc()
{
	// TODO: 在此添加控件通知处理程序代码
	OnBnClickedCheckBlue();
}



BOOL CPaintPracticeDlg::OnEraseBkgnd(CDC* pDC)
{


	BOOL bRet =  CDialogEx::OnEraseBkgnd(pDC);
	//根据颜色按钮的选择状态来选择颜色为255还是0
	int nRed, nGreen, nBule;
	nRed = m_chk_red.GetCheck() ? 255 : 0;
	nGreen = m_chk_green.GetCheck() ? 255 : 0;
	nBule = m_chk_blue.GetCheck() ? 255 : 0;

	//用三个的颜色来创建一个画刷
	COLORREF crFore = RGB(nRed, nGreen, nBule);
	CBrush brush;
	brush.CreateSolidBrush(crFore);

	CBrush* pOldBrush = pDC->SelectObject(&brush);	//保留旧的画刷

	//创建RECT 对象,即圆形的大小
	RECT rc = {100,40,400,340};

	if (m_rd_squ.GetCheck())//根据形状的radio button来选择化圆形还是矩形
	{
		pDC->Rectangle(&rc);
	}
	else
	{
		pDC->Ellipse(&rc);
	}
	pDC->SelectObject(pOldBrush);//还原旧的画刷

	return bRet;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值