Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Hintergrundfarbe ändern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.01.2004, 10:47 Uhr
proga



So, ich hoffe jemand kann mir helfen. Ich möchte ebenfalls die Farbe meiner Steuerelemente zur Laufzeit ändern. Ich habe mich hier auch schon umgeschaut, und gesehen, dass überall auf die Methode OnCtlColor bzw. auf die WM_CTLCOLOR-Message hingewiesen wird. Mein Problem ist, dass die Farbe sich ständig ändern soll. Je nachdem, welche Werte ich habe, möchte ich die Farbe meiner Steuerelemente anpassen. Die OnCtlColor-Funktion wird nur einmal aufgerufen, und zwar immer dann wenn der Dialog neugezeichnet wird. Also nehem ich an, ich muss die Wm_CTLCOLOR-Message an mein Steuerelement senden, damit die Methode auch dann aufgerufen wird, wenn ich das möchte. Ich habe es so versucht:
Wenn ich weiss, dass sich ein Wert geänder hat, möchte ich die Farbe eines CStatic-Elements, in dem der Wert angezeigt wird ändern und rufe die folgende Zeile auf:

C++:
m_InAbtastrate.SendMessage(WM_CTLCOLOR);

In der OnCtlColor-Methode ändere ich dann die Farbe:

C++:
HBRUSH CBoeCOMPortDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    COLORREF colorBlue = RGB(68, 68, 230);
    COLORREF colorRed  = RGB(253, 33, 28);

    if (m_COMPort.IsOpen())
    {
        if (nCtlColor == CTLCOLOR_STATIC)
        {
            switch (pWnd->GetDlgCtrlID())
            {
                case IDC_INABTASTRATE:
                {
                    if (m_Param.m_Abtastrate.m_Value <= m_Param.m_Abtastrate.m_MIN)
                    {
                        pDC->SetBkColor(colorBlue);
                        return m_BlueBrush;
                    }
                    else if (m_Param.m_Abtastrate.m_Value >= m_Param.m_Abtastrate.m_MAX)
                    {
                        pDC->SetBkColor(colorRed);
                        return m_RedBrush;
                    }
                    break;
                }
            }
        }
    }

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

Das funktioniert aber nicht. Wenn ich die Nachricht an das Steuerelemt sende, erhalte ich einen Fehler in der OnWndMsg-Methode von CWnd. Und zwar in der folgenden Zeile:

C++:
CDC dcTemp; dcTemp.m_hDC = pCtl->hDC;

Hier stelle ich fest, dass pCtl = NULL ist. Warum, ist mir nicht klar.

Nun, wie mache ich es denn richtig ? Wie oben schon gesagt, ich möchte zur Laufzeit die Farbe der Steuerelemente ändern. Das mache ich in der OnCtlColor-Methode. ABER !!! Wie teile ich dem Framework mit, dass diese Methode aufgerufen wird ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.01.2004, 09:12 Uhr
proga



kann mir wirklich niemand helfen, müsst ihr nie die Farbe von Steuerelemente ändern ?

Hoffe, dass sich doch noch jemand meldet
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.01.2004, 11:11 Uhr
Darky



von was willst du die hintergrundfarbe ändern?
meiner meinung nach musst du

HBRUSH ..........::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

C++:
    if(pWnd->GetDlgCtrlID()==IDC_ausgabefeld)
    {
        //Größe des ausgabefeldes                      
        CRect re;

        COLORREF hintergrund;
        hintergrund=RGB(250,0,0);
                        
        CBrush brRot(hintergrund);

        pDC->SelectObject(& brRot);

        pDC->SetBkColor(colorRed);
                      
        //speichern der koordinaten
        GetWindowRect(& re);

       //zeichnen des ausagbefeldes
       pDC->Rectangle( & re);

        return brRot;
    }
    else
    {    
        return hbr;
    }



auch die grösse und art des zu überzeichnenden objectes angeben

Dieser Post wurde am 23.01.2004 um 11:23 Uhr von Darky editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.01.2004, 17:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi, ruf einfach WM_PAINT/OnPaint() des hauptfensters auf ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: