Nom de l'auteur Qi Gao Source originale de l'article Introduction originale Récemment, une personne a été responsable de la tâche de développement d'une centrale hydroélectrique dans un endroit du Guizhou. Lors de la mise en œuvre du module du système de surveillance d'interface, je dois utiliser de nombreux commutateurs et autres éléments. représente l'état de fonctionnement actuel de l'équipement.Après une recherche sur Internet, j'ai trouvé qu'il n'y avait rien de bon dans ce domaine. Comme cela n'implique pas de contrôle, j'ai utilisé la méthode de dérivation de la classe CSTATIC pour mapper le message WM_PAINT à implémenter. la fonction. Je publierai ce cours et ces photos maintenant, dans l'espoir d'aider le contrôle industriel et ceux qui étudient ce domaine.
Le contrôle de texte est implémenté sous forme de cartes d'arrière-plan, c'est-à-dire que différentes opérations cartographiques sont effectuées dans différentes conditions pour représenter dynamiquement l'état de fonctionnement de l'appareil. Puisque cette fois-ci, il représente l'état du commutateur, j'ai utilisé deux images pour le remplacement. affichage. S'il y a de nombreuses situations, il peut être étendu et utilisé. L'image est dessinée par moi à l'aide de la planche à dessin WINDOWS. Si quelqu'un dessine un style de commutateur plus beau, faites-le-moi savoir (^_^, mon niveau est limité).
Le programme est très simple, le code approximatif est le suivant :
annuler CSwitchStatic :: OnPaint ()
{
CPaintDC dc(this); // contexte de périphérique pour la peinture
// À FAIRE : Ajoutez votre code de gestionnaire de messages ici
CRectrect ;
GetClientRect(&rect);
CDC *mdc=nouveau CDC ;
mdc->CreateCompatibleDC(&dc);
HBITMAP hbitmap ;
commutateur (this-> m_SystemMetric)
{
cas STYLE_ONE :
si(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
autre
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
casser;
cas STYLE_TWO :
si(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF1));
autre
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON1));
casser;
défaut:
si(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
autre
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
casser;
}
mdc-> SelectObject (hbitmap);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),mdc,0,0,SRCCOPY);
ReleaseDC(mdc);
::DeleteObject(hbitmap);
// N'appelle pas CStatic::OnPaint() pour peindre les messages
}
La méthode d'appel est la suivante :
J'ai configuré deux modes de fonctionnement des commutateurs et deux styles d'état des commutateurs dans le programme. Le programme fournit une méthode de réglage dynamique :
La valeur par défaut est SwitchOff. Si vous souhaitez modifier l'état, vous pouvez utiliser le code suivant :
SetSwitchState(VRAI);
Si nous voulons changer le style d’affichage du commutateur, nous pouvons utiliser le code suivant :
SetSwitchStyle(STYLE_TWO);//Le deuxième style
SetSwitchStyle(STYLE_ONE);//Le premier style
Développer