添加控件如图所示。
绑定变量
增加变量
int m_Edit_Time;
CProgressCtrl m_Progress_Time;
afx_msg void OnBnClickedOk();
afx_msg void OnTimer(UINT_PTR nIDEvent);
void DrawColor(UINT nID);
int m_EditRed;
int m_EditGreen;
int m_EditBlue;
int m_Time;
实现红绿灯
void C红绿灯Dlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
SetTimer(10086, 1000, NULL);
//CDialogEx::OnOK();
}
void C红绿灯Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_Time++;
m_Edit_Time++;
if (m_Time <=20)
{
m_EditRed = 255; m_EditGreen = 0; m_EditBlue = 0;
DrawColor(IDC_Light);
}
else if (m_Time == 21)
{
m_EditRed = 0; m_EditGreen = 255; m_EditBlue = 0;
DrawColor(IDC_Light);
m_Edit_Time = 1;
}
else if (m_Time <= 30)
{
m_EditRed = 0; m_EditGreen = 255; m_EditBlue = 0;
DrawColor(IDC_Light);
}
else if (m_Time == 31)
{
m_EditRed = 255; m_EditGreen = 255; m_EditBlue = 0;
DrawColor(IDC_Light);
m_Edit_Time = 1;
}
else if (m_Time <= 35)
{
m_EditRed = 255; m_EditGreen = 255; m_EditBlue = 0;
DrawColor(IDC_Light);
}
else if (m_Time == 36)
{
m_EditRed = 255; m_EditGreen = 0; m_EditBlue = 0;
DrawColor(IDC_Light);
m_Edit_Time = 1;
m_Time = 1;
}
m_Progress_Time.SetPos(m_Edit_Time);
UpdateData(0);
CDialogEx::OnTimer(nIDEvent);
}
void C红绿灯Dlg::DrawColor(UINT nID)
{
CWnd *pWnd = GetDlgItem(nID);
CDC *pDC = pWnd->GetDC(); //获取窗口当前的设备环境指针
CBrush drawBrush; //定义画刷变量
drawBrush.CreateSolidBrush(RGB(m_EditRed, m_EditGreen, m_EditBlue));
//创建一个填充画刷
CBrush *pOldBrush = pDC->SelectObject(&drawBrush);
CRect rcClient;
pWnd->GetClientRect(rcClient); //获取当前控件的客户区大小
pDC->Rectangle(rcClient); //用当前画刷填充指定的矩形框
pDC->SelectObject(pOldBrush); //恢复原来的画刷
}