У меня есть пользовательский интерфейс, в котором я хочу изменить цвет изображения в соответствии со стабильностью соединения, имитируя светодиод ON / OFF. Но проблема в том, что он работает только когда идет красный. И на самом деле, в другом «светодиоде» он горит зеленым, не сообщая.
Прямоугольник, который становится красным на изображениях
Я пробовал с такими вещами, как m_statusMotor.UpdateWindow () или даже UpdateData (0). Однако это не работает. При отладке я видел, что значение m_statusMotor.m_color правильно меняется на 0, но не меняет цвет светодиода.
Так вот, что делает мой класс CLed:
void CLed::OnPaint()
{
CPaintDC dc(this);
CRect r;
GetClientRect(r);
CBrush b1;
switch(m_color){
case 0:
b1.CreateSolidBrush(RGB(0, 255, 0)); // verde
break;
case 1:
b1.CreateSolidBrush(RGB(255, 0, 0)); // rojo
break;
case 2:
b1.CreateSolidBrush(RGB(255, 118, 0)); // ambar
break;
default:
b1.CreateSolidBrush(RGB(160, 160, 160)); // gris
break;
}
dc.SelectObject(&b1);
dc.Rectangle(r);
}
Здесь оно меняется на красный:
if(!misoc1.Connect(m_ipMotor, m_portMotor)){
if(!connectedmotor) m_log.AddString("No conecta con el puerto de motor");
connectedmotor = true;
firststrmotor = false;
m_statusMotor.m_color = 1;
m_statusMotor.Invalidate(true);
m_log.UpdateWindow();
UpdateData(0);
m_statusMotor.UpdateWindow();
}else connectedmotor = false;
И вот где он становится зеленым
if(!firststrmotor){
m_log.AddString("Motor OK");
m_log.UpdateWindow();
m_statusMotor.m_color = 0;
UpdateData(0);
m_statusMotor.UpdateWindow();
}
m_statusMotor относится к классу CLed;
Есть идеи, почему это работает несколько раз, а иногда нет ??