mfc 动态改变Picture Control的颜色

需求是要达到以下效果,按钮显示红色,再按一次显示绿色,用颜色显示目前振动盘的状态

mfc 动态改变Picture Control的颜色_第1张图片

mfc 动态改变Picture Control的颜色_第2张图片

思路,

1. 建立一个Picture Control空间,ID取名 IDC_COMING ,绑定变量CStatic m_coming;

2. 写一个变绿色的方法

void CDlg7::setPictureColorGreen()
{
	CPaintDC dc(this); // device context for painting
					   // TODO: 在此处添加消息处理程序代码
					   // 不为绘图消息调用 CDialogEx::OnPaint()
	CRect rc;
	CWnd *pWnd = GetDlgItem(IDC_COMING);//参数为控件ID
	pWnd->GetClientRect(&rc);//rc为控件的大小。
	int py = rc.Height();
	int px = rc.Width();

	FillRect(m_coming.GetDC()->GetSafeHdc(), &rc, CBrush(RGB(0, 255, 0)));

}

3. 再写一个变红色的,只改变最后一行

void CDlg7::setPictureColorRed()
{
	CPaintDC dc(this); // device context for painting
					   // TODO: 在此处添加消息处理程序代码
					   // 不为绘图消息调用 CDialogEx::OnPaint()
	CRect rc;
	CWnd *pWnd = GetDlgItem(IDC_COMING);//参数为控件ID
	pWnd->GetClientRect(&rc);//rc为控件的大小。
	int py = rc.Height();
	int px = rc.Width();

	FillRect(m_coming.GetDC()->GetSafeHdc(), &rc, CBrush(RGB(255, 0, 0)));
}

4. 添加OnPaint事件,初始化成绿色

void CDlg7::OnPaint()
{
	CPaintDC dc(this); // device context for painting
					   // TODO: 在此处添加消息处理程序代码
					   // 不为绘图消息调用 CDialogEx::OnPaint()
	setPictureColorGreen();
}

5. 最后添加按钮事件

void CDlg7::OnBnClickedButton6()
{
	CString str;
	if (GetDlgItemText(IDC_BUTTON6, str), str == _T("启动震动盘"))
	{
		setPictureColorRed();
		
		SetDlgItemText(IDC_BUTTON6, _T("关闭震动盘"));
	}
	else
	{
		setPictureColorGreen();
		
		SetDlgItemText(IDC_BUTTON6, _T("启动震动盘"));
	}
}

完成了

 

 

 

 

 

 

你可能感兴趣的:(C++,MFC)