Nome do autor Qi Gao Fonte original do artigo Introdução original Recentemente, uma pessoa foi responsável pela tarefa de desenvolvimento de uma estação hidrelétrica em um local em Guizhou. Na implementação do módulo do sistema de monitoramento de interface, tive que usar muitos interruptores e outras coisas que. representa o status operacional atual do equipamento. Depois de pesquisar na Internet, descobri que não há nada de bom nesta área, por não envolver controle, usei o método de derivação da classe CSTATIC para mapear a mensagem WM_PAINT para implementar. a função. Vou postar essa aula e fotos agora, esperando ajudar quem está estudando essa área.
O controle de texto é implementado na forma de mapas de fundo, ou seja, diferentes operações de mapa são realizadas sob diferentes condições para representar dinamicamente o status operacional do dispositivo. Como desta vez representa o status do switch, usei duas imagens para substituição. display. Se houver muitas situações, ela pode ser expandida e usada. A imagem é desenhada por mim usando a prancheta do WINDOWS. Se alguém desenhar um estilo de switch mais bonito, por favor me avise (^_^, meu nível é limitado).
O programa é muito simples, o código aproximado é o seguinte:
vazio CSwitchStatic::OnPaint()
{
CPaintDC dc(this); // contexto do dispositivo para pintura
// TODO: Adicione seu código de manipulador de mensagens aqui
CRreto;
GetClientRect(&rect);
CDC *mdc=novo CDC;
mdc->CreateCompatibleDC(&dc);
HBITMAP hbitmap;
switch(este->m_SystemMetric)
{
caso STYLE_ONE:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
outro
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
quebrar;
caso STYLE_TWO:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF1));
outro
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON1));
quebrar;
padrão:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
outro
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
quebrar;
}
mdc->SelectObject(hbitmap);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),mdc,0,0,SRCCOPY);
LiberarDC(mdc);
::DeleteObject(hbitmap);
// Não chama CStatic::OnPaint() para pintar mensagens
}
O método de chamada é o seguinte:
Eu configurei dois modos de operação de switch e dois estilos de status de switch no programa. O programa fornece um método de configuração dinâmico:
O padrão é SwitchOff. Se quiser alterar o estado, você pode usar o seguinte código:
SetSwitchState(VERDADEIRO);
Se quisermos alterar o estilo de exibição do switch, podemos usar o seguinte código:
SetSwitchStyle(STYLE_TWO); //O segundo estilo
SetSwitchStyle(STYLE_ONE);//O primeiro estilo
Expandir