Имя автора Ци Гао Исходный источник статьи Исходное введение Недавно один человек отвечал за разработку гидроэлектростанции в Гуйчжоу. При реализации модуля системы мониторинга интерфейса мне приходится использовать множество переключателей и других вещей, которые необходимы. представляют текущее рабочее состояние оборудования.После поиска в Интернете я обнаружил, что в этой области нет ничего хорошего. Поскольку это не связано с контролем, я использовал метод наследования класса CSTATIC для отображения сообщения WM_PAINT для реализации. функция. Я сейчас опубликую этот класс и фотографии, надеясь помочь тем, кто изучает эту область.
Текстовый элемент управления реализован в виде фоновых карт, то есть разные операции с картой выполняются в разных условиях для динамического представления рабочего состояния устройства. Поскольку на этот раз он представляет состояние коммутатора, я использовал для замены две картинки. дисплей. Если ситуаций много, его можно расширить и использовать. Изображение нарисовано мной с помощью доски для рисования WINDOWS. Если кто-нибудь нарисует более красивый стиль переключателя, сообщите мне (^_^, мой уровень ограничен).
Программа очень простая, примерный код такой:
void CSwitchStatic::OnPaint()
{
CPaintDC dc(this); // контекст устройства для рисования
// ЗАДАЧА: добавьте сюда код обработчика сообщений
CRectrect;
GetClientRect(&rect);
CDC *mdc=новый CDC;
mdc->CreateCompatibleDC(&dc);
HBITMAP hbitmap;
переключатель (this->m_SystemMetric)
{
чехол STYLE_ONE:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
еще
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
перерыв;
чехол STYLE_TWO:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF1));
еще
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON1));
перерыв;
по умолчанию:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
еще
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
перерыв;
}
mdc->SelectObject(hbitmap);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),mdc,0,0,SRCCOPY);
ReleaseDC(MDC);
::DeleteObject(hbitmap);
// Не вызывайте CStatic::OnPaint() для рисования сообщений
}
Метод вызова следующий:
В программе я настроил два режима работы переключателя и два стиля состояния переключателя. В программе предусмотрен метод динамической настройки:
По умолчанию установлено SwitchOff. Если вы хотите изменить состояние, вы можете использовать следующий код:
SetSwitchState (ИСТИНА);
Если мы хотим изменить стиль отображения переключателя, мы можем использовать следующий код:
SetSwitchStyle(STYLE_TWO);//Второй стиль
SetSwitchStyle(STYLE_ONE);//Первый стиль
Расширять