Проблема с установкой цвета текста и фона бегущей строки
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 18.01.17 10:54
Оценка:
Есть у меня поток hThread, в который в качестве данных посылается структура myStruct, в которой есть поле isthreadfinished типа bool, которое показывает, завершился ли этот поток или нет.
Есть таймер ID_TIMER_1, которому соответствует функция CMyClass::OnTimer, которая выводит бегущую строку с интервалом в полсекунды и завершает вывод бегущей строки, как только поток hThread завершит свою работу:

void  CMyClass::OnTimer(UINT uTime)
{
  if (myStruct.isthreadfinished==true)
  // если поток завершён
  {
    KillTimer(ID_TIMER_1);
    timerTest = false;
    timerCount = 0;
    m_IDC_STATIC1.SetWindowTextA(" Расчёт выполнен");
    CloseHandle(hThread);
    // прочие действия;
    return;
  }
  if (timerCount>=6)  timerCount = 0;
  if (timerCount==0)  m_IDC_STATIC1.SetWindowTextA(" Расчёт выполняется");
  if (timerCount==1)  m_IDC_STATIC1.SetWindowTextA(" Расчёт выполняется .");
  if (timerCount==2)  m_IDC_STATIC1.SetWindowTextA(" Расчёт выполняется . .");
  if (timerCount==3)  m_IDC_STATIC1.SetWindowTextA(" Расчёт выполняется . . .");
  if (timerCount==4)  m_IDC_STATIC1.SetWindowTextA(" Расчёт выполняется . . . .");
  if (timerCount==5)  m_IDC_STATIC1.SetWindowTextA(" Расчёт выполняется . . . . .");
  timerCount++;
}


В обычном случае, когда переменная m_IDC_STATIC1 относится к типу CStatic, всё работает нормально--бегущая строка чёрного цвета появляется на фоне стандартного диалога (оттенок серого цвета).

Но я захотел сменить цвет текста и цвет фона бегущей строки--чтобы эта строка была красного цвета, а цвет фона, на котором она появляется--зелёного цвета. Для этого я создал класс CMyStatic2 как потомок класса CStatic, в котором я переопределил метод OnPaint():

файл MyStatic2.h :

#include <afxwin.h>

class CMyStatic2 : public CStatic
{
  protected:
  void OnPaint();
  DECLARE_MESSAGE_MAP()
  public:
  // открытые члены класса CMyStatic;
};


файл MyStatic2.cpp :

#include "stdafx.h"
#include "MyStatic2.h"

BEGIN_MESSAGE_MAP (CMyStatic2, CStatic)
  ON_WM_PAINT()
END_MESSAGE_MAP()

void CMyStatic2::OnPaint()
{
  const MSG *msg = GetCurrentMessage();
  DefWindowProc(msg->message,msg->wParam,msg->lParam);
  RECT  rect;
  CClient  dc(this);
  GetClientRect(&rect);
  CBrush  brush(RGB(0,128,0)); // зелёный цвет фона
  dc.SelectObject(&brush);
  dc.FillRect(&rect,&brush);
  dc.SetTextColor(RGB(255,0,0)); // красный цвет текста
}


А переменную m_IDC_STATIC1 в классе CMyClass я сменил с типа CStatic на тип CMyStatic2 .

В результате чего у меня при запуске потока и таймера на одну секунду появляется статитческое поле зелёного цвета, а потом оно меняется на стандартный цвет диалога (оттенок серого цвета) и бегущая строка в этом статическом поле имеет чёрный цвет.

В чём причина этого? Как исправить эту ошибку--то есть как сделать так, чтобы это статическое поле всегда имело зелёный цвет, а бегущая строка в нём всегда имела красный цвет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.