Nombre del autor Qi Gao Fuente original del artículo Introducción original Recientemente, una persona ha sido responsable de la tarea de desarrollo de una central hidroeléctrica en un lugar en Guizhou. Al implementar el módulo del sistema de monitoreo de interfaz, tengo que usar muchos interruptores y otras cosas. Representa el estado operativo actual del equipo. Después de buscar en Internet, descubrí que no hay nada bueno en esta área. Dado que no implica control, utilicé el método de derivar la clase CSTATIC para mapear el mensaje WM_PAINT para implementar. la función. Publicaré esta clase y fotos ahora, esperando ayudar al control industrial y a aquellos que están estudiando esta área.
El control de texto se implementa en forma de mapas de fondo, es decir, se realizan diferentes operaciones de mapas en diferentes condiciones para representar dinámicamente el estado operativo del dispositivo. Dado que esta vez representa el estado del interruptor, utilicé dos imágenes para reemplazar. mostrar Si hay muchas situaciones, se puede expandir y usar. La imagen la dibujé usando el tablero de dibujo de WINDOWS. Si alguien dibuja un estilo de interruptor más hermoso, hágamelo saber (^_^, mi nivel es limitado).
El programa es muy sencillo, el código aproximado es el siguiente:
anular CSwitchStatic::OnPaint()
{
CPaintDC dc(this); // contexto del dispositivo para pintar
// TODO: Añade aquí el código del controlador de mensajes
CRectecto;
GetClientRect(&rect);
CDC *mdc=nuevo CDC;
mdc->CreateCompatibleDC(&dc);
HBITMAP mapa de bits;
cambiar(esto->m_SystemMetric)
{
caso STYLE_ONE:
si(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
demás
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
romper;
caso ESTILO_DOS:
si(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF1));
demás
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON1));
romper;
por defecto:
si(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
demás
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
romper;
}
mdc->SelectObject(hbitmap);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),mdc,0,0,SRCCOPY);
LanzamientoDC(mdc);
::DeleteObject(hbitmap);
// No llames a CStatic::OnPaint() para pintar mensajes
}
El método de llamada es el siguiente:
Configuré dos modos de funcionamiento del interruptor y dos estilos de estado del interruptor en el programa. El programa proporciona un método de configuración dinámica:
El valor predeterminado es SwitchOff. Si desea cambiar el estado, puede utilizar el siguiente código:
EstablecerSwitchState(VERDADERO);
Si queremos cambiar el estilo de visualización del interruptor, podemos usar el siguiente código:
SetSwitchStyle(STYLE_TWO);//El segundo estilo
SetSwitchStyle(STYLE_ONE);//El primer estilo
Expandir