| Autor |
Nachricht |
MFC-Coder
Unregistrierter
|
MFC-Coder Unregistrierter
15:47:49 08.03.2010 Titel: |
SetBkColor Problem bei abgeleiteter CStatic Klasse |
Zitieren |
Hallo,
folgendes (altbekanntes) Problem:
Ich habe eine abgeleitete Klasse CExStatic von CStatic erstellt und möchte standardmäßig schwarzen Text auf weißem Hintergrund.
Ohne neue Klasse bekomme ich das zwar hin, habe aber den Nachteil daß ich in OnCtlColor der Dialogklasse jedes IDC der Statics abfragen müßte und das geht einfach nicht (zuviele davon).
Lediglich in der abgeleiteten Klasse OnCtlColor zu überladen reicht wohl nicht aus.
Hat jemand eine Idee? |
|
|
|
 |
CTecS
Mitglied
Benutzerprofil
Anmeldungsdatum: 14.09.2008
Beiträge: 800
|
CTecS Mitglied
16:45:38 08.03.2010 Titel: |
|
Zitieren |
Warum benutzt du im Dialog nicht nCtlColor = CTLCOLOR_STATIC von OnCtlColor(), sollten doch dann alle Statics deines Dialoges sich melden
CWnd::OnCtlColor |
|
|
|
 |
MFC-Coder
Unregistrierter
|
MFC-Coder Unregistrierter
16:52:41 08.03.2010 Titel: |
|
Zitieren |
| CTecS schrieb: | Warum benutzt du im Dialog nicht nCtlColor = CTLCOLOR_STATIC von OnCtlColor(), sollten doch dann alle Statics deines Dialoges sich melden
CWnd::OnCtlColor |
Hallo,
ja das geht sicher auch aber ich möchte das eben flexibel als eigene Klasse haben, damit es sinnvoll wiederverwendbar ist (das wird eh eintreffen, da ich nicht nur 1 Applikation schreiben werde).
Außerdem kann es sein daß nicht alle Statics die eigene CExStatic sein werden, dann wäre deine Lösung auch nicht astrein. |
|
|
|
 |
CTecS
Mitglied
Benutzerprofil
Anmeldungsdatum: 14.09.2008
Beiträge: 800
|
CTecS Mitglied
17:31:11 08.03.2010 Titel: |
|
Zitieren |
na dann mach dir doch ne SetColor und 2 Members in der Klasse für Vorder- und Hintergrundfarbe. Füll in OnEraseBkgnd() den Hintergrund mit der entsprechenden Farbe und in der OnPaint Zeichneste den Text mit der entsprechenden Farbe und wenn de das noch besonders gut machen willst, machste noch den Font Flexibel.
Fertig! Mehr wüsste ich nicht was man so noch bei Text machen kann, außer du willst noch ein Bild Platzieren, dann kannste das ja auch der Klasse machen lassen |
|
|
|
 |
MFC-Coder
Unregistrierter
|
MFC-Coder Unregistrierter
16:57:23 09.03.2010 Titel: |
|
Zitieren |
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13139
|
Martin Richter Moderator
19:23:35 09.03.2010 Titel: |
|
Zitieren |
Vermutlich weil dort Message-Refelection verwendet wird.
ON_WM_CTLCOLOR_REFLECT! |
_________________ Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
Zuletzt bearbeitet von Martin Richter am 19:26:39 09.03.2010, insgesamt 1-mal bearbeitet |
|
 |
MFC-Coder
Unregistrierter
|
MFC-Coder Unregistrierter
08:28:43 10.03.2010 Titel: |
|
Zitieren |
| Martin Richter schrieb: | Vermutlich weil dort Message-Refelection verwendet wird.
ON_WM_CTLCOLOR_REFLECT! |
Ja das hab auch gesehen aber ich kann das REFLECT gar nicht hinzufügen.
Klassenansicht, Klasse markieren, Rechtsklick, Eigenschaften, MeldungsIcon und dann ist da nur WM_CTLCOLOR ohne REFLECT.
Wenn ich das dazuschreibe gibts folgenden Fehler:
error C2039: 'CtlColor': Ist kein Element von 'CExStatic'.
Was tun? (Benutze übrigens MSVS 2008 Standard). |
|
|
|
 |
MFC-Coder
Unregistrierter
|
MFC-Coder Unregistrierter
09:13:36 10.03.2010 Titel: |
|
Zitieren |
ARGH!
Ganz oben mit nem = zuerst... *Kopf->Tisch*
Note that the equal sign in front of the message name in the list of messages you can handle indicates that the message is reflected. This is described in Defining a Message Handler for a Reflected Message. |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 13139
|
Martin Richter Moderator
09:37:46 10.03.2010 Titel: |
|
Zitieren |
Und selbst wenn es nicht in der Liste wäre?
Bist Du nicht in der Lage ein paar Zeilen selbst zu schreiben?
Musst Du alles durch Mausschubsen programmieren? |
_________________ Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
|
|
 |
MFC-Coder
Unregistrierter
|
MFC-Coder Unregistrierter
10:14:13 10.03.2010 Titel: |
|
Zitieren |
| Martin Richter schrieb: | Und selbst wenn es nicht in der Liste wäre?
Bist Du nicht in der Lage ein paar Zeilen selbst zu schreiben?
Musst Du alles durch Mausschubsen programmieren?  |
Das Problem ist mittlerweile vom Tisch.
Die Eigenschaft "Einfach" muß auf FALSE gesetzt werden muß, damit nicht nur der Text die neue Hintergrundfarbe annimmt, sondern das gesamte StaticField.
Hab ich nirgends gelesen.
(War man nicht in der Lage das zu erwähnen oder ich nicht in der Lage das aus der tollen Beschreibung zu "Einfach" herauszulesen? Sachen gibts! )
Damit genügt SetBkColor in CtlColor und man braucht kein WM_ERASEBKGND oder sonstige Extrasachen implementieren.
Und wer weiß? Vielleicht klappts ja auch mit der normalen WM_CTLCOLOR ohne REFLECT.
Dank an alle die geholfen haben! |
|
|
|
 |