Научитесь создавать класс STATIC для функции сигнализации вместе с автором Цзян Чуаня Ци Гао.
Введение Управление сигнализацией часто встречается в различных промышленных системах управления. Существует множество методов сигнализации, которые можно обозначить текстом или представить в виде графики. Принцип заключается не что иное, как создание объекта класса CDC и последующее использование различных базовых возможностей. Просто нарисуйте. графика с использованием примитивных атрибутов. Здесь мы создадим программу, которая может отображать текст сигнала тревоги. При возникновении сигнала тревоги мы можем мигать фоном для достижения этой функции.
Обычно мы используем производные методы для реализации такого типа обработки в тексте.
Сначала используйте мастер VC для создания проекта на основе диалога.
Затем мы помещаем элемент управления STATIC в интерфейс диалогового окна и устанавливаем его положение.
Основная подготовка к созданию производного класса CStaticRectangle для нашего элемента управления STATIC завершена. Наша следующая задача — добавить содержимое в новый производный класс для достижения желаемого эффекта экрана тревоги.
Согласно тому, что я сказал в своей последней статье, используя метод двойной буферизации, нам нужно добавить в проект три файла MemDC.h, AutoFont.h и AutoFont.cpp. Класс AutoFont является лучшей инкапсуляцией класса CFont. сегодня в Интернете. Пользователям не нужно учитывать сложные функции создания API при создании объектов CFont. Им нужно всего лишь выполнить несколько простых настроек параметров для завершения функции, поэтому мы используем этот класс здесь для реализации управления шрифтом текста сигнала тревоги.
Определить объект
//Четкость цвета может быть увеличена или уменьшена в зависимости от реальной ситуации.
#define COLOR_RED RGB(255,0,0)
#define COLOR_GREEN RGB(0,255,0)
защищено:
CBitmap *m_pBitmapOldBackground;//Эти три используются для рисования в двойном буфере
CBitmap m_bitmapBackground;
CDC m_dcBackground;
CRect m_rectCtrl // область управления;
короткий nMillSec; // Таймер;
CAutoFont *m_pFnt; //Создаем шрифт текста тревоги
публика:
COLORREF m_BkColor;//Цвет фона
COLORREF m_TextColor;//Цвет текста
CString strText; //Отображаемый текст тревоги.
BOOL bGleam;//Мигает ли
Инициализируйте переменные в конструкторе:
CStaticRectangle::CSticRectangle()
{
m_BkColor = COLOR_RED;
m_TextColor = RGB (255,128,64);
нМиллСек = 10;
бблеск = ЛОЖЬ;
m_pFnt = новый CAutoFont("официальный скрипт");
m_pFnt->SetHeight(28);
m_pFnt->SetWidth(12);
m_pFnt->SetBold(ИСТИНА);
}
Память освобождается в деструкторе
CStaticRectangle::~CStaticRectangle()
{
если (m_pFnt)
удалить m_pFnt;
}
Чтобы нарисовать функцию сигнализации STATIC, нам нужно всего лишь отобразить сообщение WM_PAINT, а затем перерисовать интерфейс и отобразить текст.
void CStaticRectangle::OnPaint()
{
CPaintDC dc(this); // контекст устройства для рисования
// ЗАДАЧА: добавьте сюда код обработчика сообщений
// Получаем область управления
GetClientRect (&m_rectCtrl);
CMemDC memDC(&dc, &m_rectCtrl);
if(m_dcBackground.GetSafeHdc()== NULL|| (m_bitmapBackground.m_hObject == NULL))
{
m_dcBackground.CreateCompatibleDC(&DC);
m_bitmapBackground.CreateCompatibleBitmap(&dc, m_rectCtrl.Width(), m_rectCtrl.Height()) ;
m_pBitmapOldBackground = m_dcBackground.SelectObject(&m_bitmapBackground);
}
DrawRectangleBackground(&m_dcBackground, m_rectCtrl);
memDC.BitBlt(0, 0, m_rectCtrl.Width(), m_rectCtrl.Height(),
&m_dcBackground, 0, 0, SRCCOPY);
// Не вызывайте CStatic::OnPaint() для рисования сообщений
}
Далее мы управляем отображением соответствующей информации. Здесь нам нужно обратить внимание на отображение нашего текста. Здесь нам нужно рассчитать положение отображения текста.
Мы можем получить CSize текста через pDC->GetTextExtent();, а затем использовать прямоугольник элемента управления, чтобы получить положение отображения текста.
Используемый здесь метод заключается в отображении его в центре.
void CStaticRectangle::DrawRectangleBackground(CDC *pDC, CRect &rect)
{
CBrush BrushFill, *pBrushOld;
интервал nXSize, nYSize;
CSize szText;
CFont *foldFont;
nXSize = прямоугольник.Ширина();
nYSize = rect.Height();
кистьFill.DeleteObject();
кистьFill.CreateSolidBrush(m_BkColor);
pBrushOld = pDC->SelectObject(&brushFill);
pDC->Прямоугольник(прямоугольник);
pDC->SetBkColor(m_BkColor);
pDC->SetTextColor(m_TextColor);
fOldFont = (CFont *)pDC->SelectObject(m_pFnt);
szText = pDC->GetTextExtent(strText);
nXSize = (nXSize - szText.cx)/2;
nYSize = (nYSize - szText.cy)/2;
pDC->TextOut(nXSize,nYSize,strText);
pDC->SelectObject(pBrushOld);
pDC->SelectObject(&fOldFont);
кистьFill.DeleteObject();
}
Если мы хотим реализовать функцию будильника, нам нужно использовать функцию таймера, чтобы регулярно менять цвет фона, а затем обновлять дисплей.
На этом основная работа завершена. Следующее, что нужно сделать, — это предоставить интерфейс, который пользователи смогут динамически изменять.
void CStaticRectangle::SetRectangleText(CString strVal)
{
это->strText = strVal;
}
void CStaticRectangle::SetBackColor(UINT nStyle)//Установить цвет фона
{
это->m_BkColor = nStyle;
}
void CStaticRectangle::SetBkGleam(BOOL bShow)
{
если(это->bGleam)
{
если(!bShow)
KillTimer(nMillSec);
}
еще
{
если (бПоказать)
SetTimer(nMillSec,750,NULL);
}
это->bGleam = bShow;
}
Итак, теперь, когда наш функциональный класс готов, следующее, что нужно сделать, — это соединить его с CSTATIC на интерфейсе.
Создайте переменную, связанную с элементом управления STATIC (тип элемента управления), с помощью CLASSWIZARD, затем измените производный тип на наш CStaticRectangle и установите эффект мигания, и мы сможем увидеть эффект.
Расширять