Name des Autors Qi Gao Originalquelle des Artikels Ursprüngliche Einführung Vor kurzem war eine Person für die Entwicklungsaufgabe eines Wasserkraftwerks an einem Ort in Guizhou verantwortlich. Bei der Implementierung des Schnittstellenüberwachungssystemmoduls musste ich viele Schalter und andere Dinge verwenden Stellen Sie den aktuellen Betriebsstatus des Geräts dar. Nach einer Suche im Internet habe ich festgestellt, dass es in diesem Bereich keine guten Dinge gibt. Da es sich nicht um eine Steuerung handelt, habe ich die Methode zur Ableitung der CSTATIC-Klasse verwendet, um die zu implementierende WM_PAINT-Nachricht abzubilden Ich werde diesen Kurs und die Bilder jetzt veröffentlichen und hoffe, dass sie denjenigen helfen, die sich mit diesem Bereich befassen.
Die Textsteuerung wird in Form von Hintergrundkarten implementiert, das heißt, verschiedene Kartenoperationen werden unter verschiedenen Bedingungen ausgeführt, um den Betriebsstatus des Geräts dynamisch darzustellen. Da es sich diesmal um den Status des Schalters handelt, habe ich zwei Bilder als Ersatz verwendet Wenn es viele Situationen gibt, kann es von mir mit dem WINDOWS-Zeichenbrett gezeichnet werden. Wenn jemand einen schöneren Switch-Stil zeichnet, lassen Sie es mich bitte wissen.
Das Programm ist sehr einfach, der ungefähre Code lautet wie folgt:
void CSwitchStatic::OnPaint()
{
CPaintDC dc(this); // Gerätekontext zum Malen
// TODO: Fügen Sie hier Ihren Nachrichtenhandlercode hinzu
CRectrect;
GetClientRect(&rect);
CDC *mdc=neues CDC;
mdc->CreateCompatibleDC(&dc);
HBITMAP hbitmap;
switch(this->m_SystemMetric)
{
Hülle STYLE_ONE:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
anders
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
brechen;
Fall STYLE_TWO:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF1));
anders
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON1));
brechen;
Standard:
if(!this->bSwitchOn)
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHOFF));
anders
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_SWITCHON));
brechen;
}
mdc->SelectObject(hbitmap);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),mdc,0,0,SRCCOPY);
ReleaseDC(mdc);
::DeleteObject(hbitmap);
// CStatic::OnPaint() nicht zum Malen von Nachrichten aufrufen
}
Die aufrufende Methode lautet wie folgt:
Ich habe im Programm zwei Schalterbetriebsarten und zwei Schalterstatusstile eingerichtet. Das Programm bietet eine dynamische Einstellungsmethode:
Der Standardwert ist SwitchOff. Wenn Sie den Status ändern möchten, können Sie den folgenden Code verwenden:
SetSwitchState(TRUE);
Wenn wir den Anzeigestil des Schalters ändern möchten, können wir den folgenden Code verwenden:
SetSwitchStyle(STYLE_TWO);//Der zweite Stil
SetSwitchStyle(STYLE_ONE);//Der erste Stil
Expandieren