Service: C/C++ Tipps: Symbole (Icons) oder Bitmaps auf Schaltflächen anzeigen


Dieser Tipp ist eigentlich kein Tipp - sondern nur ein Hinweis auf einen Tipp und eine Empfehlung!

Die Klasse CButtonSt ist eine hervorragende - von der MFC-Klasse CButton abgeleitete Implementierung für alle möglichen und unmöglichen Arten, Schaltflächen um jede Art von Symbol (Icons oder Bitmaps) zu ergänzen bzw. Schaltflächen auf diese und andere Weise schöner darzustellen.

Ich habe die Klasse in einem ATL-Projekt mit Erfolg eingesetzt, um in einer Bedieneroberfläche den Status von FET- (Feld-Effekt-Transistor) Schaltern mit Hilfe von Schaltflächen darzustellen und gleichzeitig - durch klicken der Schaltflächen - schalten zu können.

Etwa so:

Dabei stehen die Farben der LED-Symbole für folgende Zustände:

  • Grau: Nicht verbunden
  • Rot: Nicht eingeschaltet
  • Grün: Eingeschaltet
Hinweis zu einem Fehler in CButtonST

Im Rahmen der Bedieneroberfläche und in Anbetracht der Tatsache, dass sich der Status der Schalter ständig ändern kann, musste das entsprechende Symbol der Schaltfläche mit Hilfe von CButtonST::SetIcon() immer wieder neu zugewiesen werden.

Es stellte sich heraus, dass CButtonST dabei die HICON-Resourcen nicht korrekt freigibt. Dies führt zu einem kontinuierlichen Speicherverbrauch, der im Laufe einer gewissen Zeit zunächst dazu führt, dass Windows keinerlei Fenster mehr (richtig) zeichnen kann - und schließlich den Absturz der Bedieneroberfläche hervorruft.

Der Fehler ist jedoch leicht zu beheben: in CButtonST::FreeResources(bool bCheckFor0) folgende Zeilen:

    if (m_csIcons[0].hIcon) { ::DeleteObject(m_csIcons[0].hIcon); }
    if (m_csIcons[1].hIcon) { ::DeleteObject(m_csIcons[1].hIcon); }

ersetzen durch:

    if (m_csIcons[0].hIcon) { ::DestroyIcon(m_csIcons[0].hIcon); }
    if (m_csIcons[1].hIcon) { ::DestroyIcon(m_csIcons[1].hIcon); }

Seitenanfang

Kontaktaufnahme- und Terminvereinbarung:

Bei Fragen und für Terminvereinbarungen erreichen Sie uns unter:

0 63 49 99 07 38

0 151 51 95 34 00

Oder nutzen Sie das Kontaktformular




Ihr Ansprechpartner:


Hier sollte das Fahnungsfoto zu sehen sein.

Ralf Kunsmann

Spezialist für VBA-Programmierung
(alle Office-Anwendungen)
Entwickler der
VBA-Extension-Tools