Lernen Sie mit dem Jiang Chuan-Autor Qi Gao, wie man eine STATIC-Klasse für die Alarmfunktion erstellt
Einführung Die Alarmsteuerung wird häufig in verschiedenen industriellen Steuerungssystemen verwendet. Es gibt viele Methoden zur Alarmierung, die durch Text markiert oder durch Grafiken dargestellt werden können. Das Prinzip besteht lediglich darin, ein CDC-Klassenobjekt zu erstellen und dann die verschiedenen grundlegenden Funktionen zu verwenden Grafiken unter Verwendung der primitiven Attribute. Hier erstellen wir ein Programm, das Alarmtext anzeigen kann, um die Funktion zu erreichen.
Um diese Art der Verarbeitung im Text zu implementieren, verwenden wir im Allgemeinen abgeleitete Methoden.
Verwenden Sie zunächst den VC-Assistenten, um ein dialogbasiertes Projekt zu erstellen.
Dann platzieren wir ein STATIC-Steuerelement auf der Dialogbox-Schnittstelle und legen die Position fest.
Die grundlegenden Vorbereitungen für die Ableitung einer CStatic-basierten Klasse namens CStaticRectangle für unser STATIC-Steuerelement sind abgeschlossen. Unsere nächste Aufgabe besteht darin, Inhalte zur neuen abgeleiteten Klasse hinzuzufügen, um den gewünschten Alarmbildschirmeffekt zu erzielen.
Gemäß dem, was ich in meinem letzten Artikel gesagt habe, müssen wir bei Verwendung der Doppelpufferungsmethode die drei Dateien MemDC.h, AutoFont.h und AutoFont.cpp zum Projekt hinzufügen. Die AutoFont-Klasse ist eine bessere Kapselung der CFont-Klasse Im Internet müssen Benutzer beim Erstellen von CFont-Objekten keine komplexen API-Funktionen berücksichtigen. Sie müssen nur einige einfache Parametereinstellungen vornehmen, um die Funktion abzuschließen. Daher verwenden wir diese Klasse hier, um die Schriftartsteuerung für Alarmtexte zu implementieren.
Objekt definieren
// Die Farbdefinition kann je nach tatsächlicher Situation erhöht oder verringert werden.
#define COLOR_RED RGB(255,0,0)
#define COLOR_GREEN RGB(0,255,0)
geschützt:
CBitmap *m_pBitmapOldBackground;//Diese drei werden für die Doppelpufferzeichnung verwendet
CBitmap m_bitmapBackground;
CDC m_dcBackground;
CRect m_rectCtrl; // Kontrollbereich
short nMillSec; //Timer
CAutoFont *m_pFnt; //Alarmtextschriftart erstellen
öffentlich:
COLORREF m_BkColor;//Hintergrundfarbe
COLORREF m_TextColor;//Textfarbe
CString strText; //Angezeigter Alarmtext
BOOL bGleam;//Ob es blinkt
Variablen im Konstruktor initialisieren:
CStaticRectangle::CStaticRectangle()
{
m_BkColor = COLOR_RED;
m_TextColor = RGB(255,128,64);
nMillSec = 10;
bGleam = FALSE;
m_pFnt = new CAutoFont("offizielles Skript");
m_pFnt->SetHeight(28);
m_pFnt->SetWidth(12);
m_pFnt->SetBold(TRUE);
}
Im Destruktor wird Speicher freigegeben
CStaticRectangle::~CStaticRectangle()
{
if(m_pFnt)
m_pFnt löschen;
}
Um die STATIC-Alarmfunktion zu zeichnen, müssen wir nur die WM_PAINT-Nachricht zuordnen, dann die Schnittstelle neu zeichnen und den Text anzeigen.
void CStaticRectangle::OnPaint()
{
CPaintDC dc(this); // Gerätekontext zum Malen
// TODO: Fügen Sie hier Ihren Nachrichtenhandlercode hinzu
// Holen Sie sich den Kontrollbereich
GetClientRect (&m_rectCtrl);
CMemDC memDC(&dc, &m_rectCtrl);
if(m_dcBackground.GetSafeHdc()== NULL|| (m_bitmapBackground.m_hObject == NULL))
{
m_dcBackground.CreateCompatibleDC(&dc);
m_bitmapBackground.CreateCompatibleBitmap(&dc, m_rectCtrl.Width(), m_rectCtrl.Height()) ;
m_pBitmapOldBackground = m_dcBackground.SelectObject(&m_bitmapBackground);
}
DrawRectangleBackground(&m_dcBackground, m_rectCtrl);
memDC.BitBlt(0, 0, m_rectCtrl.Width(), m_rectCtrl.Height(),
&m_dcBackground, 0, 0, SRCCOPY);
// CStatic::OnPaint() nicht zum Malen von Nachrichten aufrufen
}
Als nächstes steuern wir die Anzeige relevanter Informationen. Hier müssen wir auf die Anzeige unseres Textes achten.
Wir können die CSize des Texts über pDC->GetTextExtent(); abrufen und dann das Rect des Steuerelements verwenden, um die Anzeigeposition des Texts zu ermitteln.
Die hier verwendete Methode besteht darin, es in der Mitte anzuzeigen.
void CStaticRectangle::DrawRectangleBackground(CDC *pDC, CRect &rect)
{
CBrush brushFill, *pBrushOld;
int nXSize,nYSize;
CSize szText;
CFont *fOldFont;
nXSize = rect.Width();
nYSize = rect.Height();
brushFill.DeleteObject();
brushFill.CreateSolidBrush(m_BkColor);
pBrushOld = pDC->SelectObject(&brushFill);
pDC->Rectangle(rect);
pDC->SetBkColor(m_BkColor);
pDC->SetTextColor(m_TextColor);
fOldFont = (CFont *)pDC->SelectObject(m_pFnt);
szText = pDC->GetTextExtent(strText);
nXSize = (nXSize - szText.cx)/2;
nYSize = (nYSize - szText.cy)/2;
pDC->TextOut(nXSize,nYSize,strText);
pDC->SelectObject(pBrushOld);
pDC->SelectObject(&fOldFont);
brushFill.DeleteObject();
}
Wenn wir die Alarmfunktion implementieren möchten, müssen wir die Timer-Funktion verwenden, um die Hintergrundfarbe regelmäßig zu ändern und dann die Anzeige zu aktualisieren.
Zu diesem Zeitpunkt ist die grundlegende Arbeit abgeschlossen. Als Nächstes muss eine Schnittstelle bereitgestellt werden, die Benutzer dynamisch ändern können.
void CStaticRectangle::SetRectangleText(CString strVal)
{
this->strText = strVal;
}
void CStaticRectangle::SetBackColor(UINT nStyle)//Legen Sie die Hintergrundfarbe fest
{
this->m_BkColor = nStyle;
}
void CStaticRectangle::SetBkGleam(BOOL bShow)
{
if(this->bGleam)
{
if(!bShow)
KillTimer(nMillSec);
}
anders
{
if(bShow)
SetTimer(nMillSec,750,NULL);
}
this->bGleam = bShow;
}
Nun, da unsere Funktionsklasse fertig ist, müssen wir sie als Nächstes mit CSTATIC auf der Schnittstelle verbinden.
Erstellen Sie über CLASSWIZARD eine mit dem STATIC-Steuerelement verknüpfte Variable (Steuerelementtyp), ändern Sie dann den abgeleiteten Typ in unser CStaticRectangle und legen Sie den Blinkeffekt fest. Wir können den Effekt sehen.
Expandieren