Elemente in Dialog unterschied einfärben



  • Hallo,

    habe ein kleines Problem. Ich möchte mehrere Steuerelemente in verschiedenen Farben darstellen
    oder den Text einfärben. Nachdem aber die erste if-Schleife mit einer Return-Anweisung kommt,
    kehrt die Funktion zurück (ist ja klar) wird aber nicht noch einmal gestartet. Somit bleiben
    alle nachfolgenden Anweisungen unausgeführt.

    Habe ich einen Denkfehler? Eigentlich wird die Funktion OnCtlColor doch für jedes
    Steuerelement aufgerufen, oder nicht?...sehr komisch.

    HBRUSH CFarbeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
      {
        // Brush für den Dialog Hintergrund anlegen
        HBRUSH hBGBrush = CreateSolidBrush(RGB(128, 184, 223));
        // Brush für den Hintergrund des Eingabefeld festlegen
        HBRUSH hBGEdit = CreateSolidBrush(RGB(0, 0, 0));
    
        if(pWnd->GetDlgCtrlID() == IDC_TEXT)
        {
          // Hintergrund für Text auf weiss setzen
          pDC->SetBkColor(RGB(255, 255, 255));
          // Textfarbe ändern
          pDC->SetTextColor(RGB(255, 0, 0));
        }
    
        if(pWnd->GetDlgCtrlID() == IDC_EDIT1)
        {
          // Hintergrund für Text transparent setzen
          pDC->SetBkMode(TRANSPARENT);
          // Textfarbe ändern
          pDC->SetTextColor(RGB(0, 255, 0));
          // Brush für Hintergrund des Eingabefelds zurückgeben
          return hBGEdit;
        }
    
        if(pWnd->GetDlgCtrlID() == IDC_LIST1)
        {
          pDC->SetBkMode(TRANSPARENT);
          pDC->SetTextColor(RGB(0, 0, 255));
        }
    
        // Brush für Dialog Hintergrund zurückgeben
        return hBGBrush;
      }
    

    schönen Dank,
    Krommi


  • Mod

    Ich sehe nichts was Deiner Beschreibung gleich kommt!
    Bist Du sicher, dass alle die IDC's unterschiedlich und korrekt sind?

    Das einzige Problem was ich sehe ist, dass Du permanent neue Brushes erzeugst und diese natürlich niemals entsorgt werden. Auf kurz oder lang führt dies zu einem katastophalen Ressourcen Leak!

    Die Brushes nur einmal in der Diaog Klasse erzeugen und speichern.


Anmelden zum Antworten