Farbe in EditBox macht Probleme



  • Hi Leute!

    Ich hab es ja soweit selber geschafft, aufgrund der Suche im Forum, den Hintergrund einer Editbox farbig zu gestalten.

    HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    { 
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
        if(pWnd->GetDlgCtrlID() == IDC_EDIT1) 
        { 
            hbr = CreateSolidBrush(RGB(255, 100, 100));//Button soll grün werden 
            return hbr; 
        } 
        else 
            return hbr; 
    }
    

    Nun wird zwar beim Start des Proggy alles soweit gut dargestellt, aber wehe ich füge einen Buchstaben in die EditBox ein. Der Hintergrund bleibt farbig, aber der Buchstabe wird von einer weißen Fläche umgeben, in der Größe wie die Platzdefinition für diesen Buchstaben in der Schriftart, also die Buchstabenmatrix wird weiß dargestellt. Ich möchte aber, dass der schwarze Buchstabe richtig auf dem farbigen Hintergrund steht und net noch Weiß mit drin ist.
    Muss ich nochmal OnPaint() oder ReDraw() rufen?

    Danke Ranger



  • Erzeuge mal eine Funktion für OnChange, also eine Funktion, die ausgeführt wird, wenn sich in dem Editfeld etwas ändert (EN_CHANGE).
    Dann brauchst du noch eine Membervariable für dein Editfeld.
    Und dann rufst du in OnChange Invalidate über die Editfeldmembervariable auf.

    void CClass::OnChangeEdit1()
    {
    	m_EditfeldMember.Invalidate();
    }
    


  • Danke

    Ich hatte schon ne Funktion auf EN_CHANGE gelegt, aber wusste nicht wie ichda drin reagieren sollte.
    Vielen Dank, Ranger



  • Jetzt ist nur noch die Frage, welchen Variablentyp anhänge. Eine Contol oder einen Wert. Ich hab herausgefunden, dass es mit Control ein Invalidate() gibt und bei Wert (CString) nicht, also denk ich es ist die Control, aber er macht es nicht wirklich, der Buchstabenhintergrund bleibt immernoch weiß.

    void CTestDlg::OnChangeEdit1()
    {
    	m_Edit.Invalidate();
    }
    

    Danke



  • Oh, hoppla, habe das Problem falsch verstanden...
    Dann habe ich wohl doch keine Lösung.



  • Selber gefunden, das Zauberwort lautet
    [cpp]

    HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if(pWnd->GetDlgCtrlID() == IDC_EDIT1)
    {
    hbr = CreateSolidBrush(RGB(255, 100, 100));//Button soll grün werden
    pDC->SetBkMode(TRANSPARENT);
    return hbr;
    }
    else
    return hbr;
    }
    [/cpp]


Anmelden zum Antworten