CEdit - Hintergrund komplett färben



  • Hallo zusammen,

    ich habe gerade den Hintergrund einiger Textfelder mit

    if(nCtlColor == CTLCOLOR_STATIC)
        {
          // Hintergrund für Text setzen
          pDC->SetBkColor(RGB(204,228,253));
          // Textfarbe ändern
        }
    

    gefärbt. Manche Felder sind allerdings größer als der Bereich, wo wirklich Text steht. Es wird aber nur der Hintergrundbereich eingefärbt, wo auch Text steht? Der Rest der Textbox bleibt grau. Wie ändere ich das?
    Danke schonmal.
    LG,
    Lexaja



  • Weil SetBkColor nur für den Hintergrund des gezeichneten Textes bestimmt ist.

    Statt SetBkColor kannst Du mit FillRect das Rechteck, das Du per GetClientRect erhältst, füllen.



  • Vielen Dank, das probier ich gleich mal aus 🙂



  • Hier ne nette Seite, die das alles sehr gut rüberbringt

    Coding-Help.de



  • Hallihallo,

    also irgendwie klappt es mit dem FillRect auch nicht. Was mache ich denn falsch? Ich gebe euch mal meinen Programmcode!

    void CMeineKlasse::OnDraw(CDC* pDC) 
    {	
         CBrush* myBrush = new CBrush(RGB(204,228,253));
         CRect clientRect;
         GetClientRect(&clientRect);
         pDC->FillRect(clientRect, myBrush);
    }
    

    Die Klasse CMeineKlasse ist übrigens eine FormView. Vielleicht liegt es daran?



  • Für alle, die es interessiert! Mit SetBkColor gehts doch. Siehe unten:

    if(nCtlColor == CTLCOLOR_STATIC)
        {
            HBRUSH farbe = CreateSolidBrush(RGB(204,228,253));
    
            if(nCtlColor == CTLCOLOR_STATIC)
            {
                 pDC->SetBkColor(RGB(204,228,253));
                 return farbe;
            }
        }
    


  • Lexaja schrieb:

    Für alle, die es interessiert! Mit SetBkColor gehts doch. Siehe unten:

    if(nCtlColor == CTLCOLOR_STATIC)
        {
            HBRUSH farbe = CreateSolidBrush(RGB(204,228,253));
            
            if(nCtlColor == CTLCOLOR_STATIC)
            {
                 pDC->SetBkColor(RGB(204,228,253));
                 return farbe;
            }
        }
    

    Wo ist der Unterschied zwischen Zeile 1 und 5?



  • Ups, da hab ich wohl zu viel Copy-Paste gedrückt 😉
    Richtige Version:

    HBRUSH CMeineKlasse::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
         HBRUSH farbe = CreateSolidBrush(RGB(204,228,253));
         if(nCtlColor == CTLCOLOR_STATIC)
         {
              pDC->SetBkColor(RGB(204,228,253));
              return farbe;
         }
    }
    

Log in to reply