Farbe ändern Edit Feld

JimboJT

Grünschnabel
Hallo,

hat einer von euch vllt. ein Beispielcode bzw. ne Beschreibung wie ich über ein Button in MFC ein Edit Feld von Grün auf Rot färben kann?
Es würde mich echt weiterbringen.
Danke für eure Mühe.
 
Hallo,

das heißt, du hast die Grünfärbung schon hinbekommen? Dann ist die Umschaltung eigentlich kein Problem. Über den Button setzt du ein Flag und rufst für das Edit-Feld Invalidate() auf. Anhand des Flags kannst du dann bei OnCtlColor() entscheiden, ob's rot oder grün werden soll.

Gruß
MCoder
 
Hallo,

danke für deine Antwort. Also das es Rot ist habe ich schon hinbekommen mit dem folgenden Quelltext. Leider bin ich sehr unerfahren im Programmieren. Kannst du mir nochmal helfen. Gibt es ein bestimmtes Flag das gesetzt wird und das ich abfragen kann und wie muss ich die Funktion Invalidate gestalten?

Danke.

Code:
...
m_wndEdit = new CBrush(RGB(255, 0, 0));
...
HBRUSH CVC_TSTDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
      {
          switch (nCtlColor) {

          case CTLCOLOR_EDIT:
          case CTLCOLOR_MSGBOX:
              // Set color to green on black and return the background
//                 brush.
              pDC->SetTextColor(RGB(0, 255, 0));
              pDC->SetBkColor(RGB(0, 255, 0));
              return (HBRUSH)(m_wndEdit->GetSafeHandle());

          default:
              return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
          }
      }
]
 
Hallo,

ich würde der Einfachheit halber zwei Brushes anlegen. Außerdem ist es nicht notwendig, diese als Zeiger zu deklarieren; man spart sich das Aufräumen (delete).
C++:
CBrush m_brushRed, m_brushGreen; //Deklaration im Header

...

m_brushRed.CreateSolidBrush(RGB(255,0,0));    // Initialisierung im Konstruktor
m_brushGreen.CreateSolidBrush(RGB(0,255,0));  // Initialisierung im Konstruktor
Der Rest ist eigentlich nicht weiter spektakulär. Du deklarierst eine boolsche Membervariable, die als Flag für die rot/grün-Umschaltung dient und schaltest diese jeweils immer im Klick-Event des Buttons um.
C++:
BOOL m_bShowRed; //Deklaration im Header

...

m_bShowRed = TRUE; // Initialisierung im Konstruktor

...

void CVC_TSTDlg::OnBtnXYZ() // Klick-Handler des Buttons
{
    m_bShowRed = !m_bShowRed;
    GetDlgItem(IDC_EDIT_ABCD)->Invalidate();   // IDC_EDIT_ABCD ist die ID des Edit-Controls
                                               // (heisst bei dir natürlich anders)
}

HBRUSH CVC_TSTDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    if( pWnd->GetDlgCtrlID() == IDC_EDIT_ABCD ) // Ich halte es für besser,
                                                // gezielt auf die zu ändernde
                                                // Control-ID zu prüfen
    {
        if( m_bShowRed )
        {
              pDC->SetBkColor(RGB(255,0,0));
              return (HBRUSH)(m_brushRed.GetSafeHandle());
        }
        else
        {
              pDC->SetBkColor(RGB(0, 255, 0));
              return (HBRUSH)(m_brushGreen.GetSafeHandle());
        }
    }

    return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
Gruß
MCoder
 
Zurück