SetTextColor() Editcontrol



  • Hi,

    kann mir jmd kurz erklären, warum meine Textfarbe (SetTextColor() im CtlColor() Handler) von einem Editcontrol beim Hinzufügen des OnPaint() Handlers überschrieben wird oder nicht mehr ausgeführt wird?

    Ohne der OnPaint() Methode wird der Text weiß dargestellt; mit der OnPaint() Methode wird er leider schwarz dargestellt - wie kann man das ändern 😕 ?

    void CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
    {
       pDC->SetBkMode(TRANSPARENT); 
       pDC->SetTextColor(RGB(255,255,255)); 
       pDC->SetBkColor(TRANSPARENT); 
       return reinterpret_cast<HBRUSH>(GetStockObject(HOLLOW_BRUSH)); 
    }
    
    void CColorEdit::OnPaint()
    {
      CPaintDC dc(this);
    
      CRect rect;
      GetClientRect(rect);
    
      CString sTitle;
      GetWindowText(sTitle);
      dc.DrawText(sTitle, rect, DT_CENTER | DT_SINGLELINE | DT_VCENTER);
    }
    
    BOOL CColorEdit::OnEraseBkgnd(CDC* pDC) 
    {
      return TRUE;
    }
    

    Vielen Dank für eure Hilfe!

    Gruß
    Lukas


  • Mod

    Das ist totaler Qutsch.
    Dein OnPaint Handler fragt ja gar nicht nach der Farbe.

    Was glaubst Du was der original On Paint Handler eines Edit Controls macht, wenn er WM_PAINT bekommt? Er sendet WM_CTLCOLOR an sein Parent...

    Du erzeugst einen Standard DC und zeichnest damit. Folge: Textfarbe schwarz.

    BTW: Genauso unsinnig ist es übrigends den Hintergrung nicht zu löschen und die Bk-Farbe auf durchsichtig zu stellen. Wie glaubst Du werden alte Informationen gelöscht wenn man den Backspace drückt. Indem man mit der Hintergrundfarbe übermalt. Da diese bei Dir durchsichtig ist heißt das: Artefakte ohne Ende.



  • Martin Richter schrieb:

    Das ist totaler Qutsch.
    Dein OnPaint Handler fragt ja gar nicht nach der Farbe.

    Wie kann ich im OnPaint() Handler nach der Farbe fragen?

    Später möchte ich im OnBackgroundErase() ein Bild zeichnen lassen; habs allerdings jetzt draußen gelassen um den Fehler (Farbe) einkreisen zu können.



  • Hab gerade mal

    CDC *pDC = GetDC();
    

    im OnPaint() Handler aus probiert, aber leider ohne Erfolg.

    Vielleicht kannst du mir die notwendige Methode / Funktion nennen, mit der ich mit dem richtigen CDC im OnPaint(/) Handler den Text zeichnen kann.


  • Mod

    Warum wiullst Du bitt ein einem CEdit Control selber zeichnen. Ein CtlColor Handler sollte genügen um das Control einzufärben.
    http://msdn.microsoft.com/en-us/library/eeah46xd(VS.80).aspx

    Also schmeiß Deinen OnEraseBkGnd Handler weg und den OnPaint Handler.


Log in to reply