Hintergrundfarbe eines textfeldes ändern
-
peinlich...
nein normalerweise weiss ich das...
kann ich dass noch auf silvester schieben???
-
Du meinst, du hast noch zu viel Restalkohol im Blut?
Okay, akzeptiert - aber hol dir schnell einen Kaffee.Jetzt klappts also?
-
ich komm jetz zurecht...danke...
das mit dem kaffee ist ne gute idee...
-
hallo
jetz gibts schon wieder probleme...
ich hab in OnInitDialogm_brush.CreateSolidBrush(RGB(0,0,0));
stehen.
unter der OnInitDialog hab ich folgende funktion:
HBRUSH Property::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor) { HBRUSH hbr = Property::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID() == IDC_DISPLAYTEXT) { pDC->SetTextColor(RGB(0,0,0)); pDC->SetBkColor(RGB(255,255,255)); return m_brush; } return hbr; }
aber nun bekomm ich an dieser stelle
m_brush.CreateSolidBrush(RGB(0,0,0));
einen Fehler. Das CStatic Feld hat auch die farbe nicht gewechselt...
hab keine Ahnung warum
-
Was für einen Fehler?
-
Debug Assertion Failed
kommt aber nur vor wenn ich ein zweites mal den dialog öffne...
wenn ich auf ignorieren klicke läufts normal weiter, aber dass kanns ja auch ned sein...
-
Drück bitte wiederholen, das ist kein Fehler sondern ein "du hast da Mist gemacht, guck mal" von der MFC.
Dann zeig den Code, wo er steht.
-
er bleibt bei dieser zeile stehen
ASSERT(m_hObject == NULL);
kannst du was damit anfangen?
-
Da ist schon was da, was nicht da sein darf.
Um zu sagen, WAS schon da ist, müßte ich den Aufrufstack kennen (welche Zeile ist die aus deinem Code?) und die Funktion um den ASSERT herum.
Ich vermute, du machst ein zweites Mal CreateSolidBrush ohne ein DeleteObject dazwischen.
-
hey du kennst dich ja gut aus ;-)...
kaum schreibt man ein deleteobject dazwischen, schon läufts wieder...
aber es wird immer noch ned weiss....
-
Das mit dem DeleteObject hatte ich dir aber geschrieben, lies mal weiter oben.
Kommt er überhaupt in die Funktion? Setz mal einen Breakpoint rein oder ein TRACE (also in die if, außerhalb kommt er mit Sicherheit lang...).
-
nein er kommt nicht in die funktion rein...
-
Hast du es in die Messagemap eingebunden?
Ist die ID richtig?
Mach mal "Alles neu erstellen".Wenn es dann immer noch nicht geht bin ich langsam ratlos.
-
hallo
erstmal die gute nachricht...
es wird endlich mal die HBRUSH funktion aufgerufen.
Allerdings scheitert er dann an der if abfrage. ich hab die ID 1:1 aus dem Wizard rauskopiert. die muss stimmen.ja ich habs in die messagemap eingebunden
ja ich hab alles neu erstellt
-
komisch...
wenn ich die if-abfrage mit zugehörigen klammern weglasse und einfach nur
m_brush zurückgebe, werden die ganzen editfelder gefärbt...
so falsch kann der code gar nicht mehr sein... muss halt "nur" noch das static textfeld treffen...aber wie...
-
ok hab das problem gelöst.
den grund will ich aber nicht für mich behalten ,-)mein fehler lag hier
HBRUSH hbr = MeinDialog::OnCtlColor(pDC, pWnd, [b]UINT nCtlColor[/b]);
ich hab bei nCtlColor nicht CTLCOLOR_STATIC eingetragen...
kaum gemacht, schon läufts...
ich danke dir für deine hilfe @estartu_de
-
Gerne geschehen.
Ich wäre aber auch nie darauf gekommen, dass du OnCtlColor selber aufrufst, da das eigentlich automatisch passiert.