PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual C++: Farbe von Dialogfeld ändern?


Vedek Bareil
2005-03-30, 12:27:49
Hi Leute,

ich hab folgendes Problem: ich programmiere (in VC++ 6.0) an einer dialogfeldbasierten Anwendung, und je nach gerade durchgeführter Aktion soll die Hintergrundfarbe des Dialogfeldes verändert werden (z.B. rot, gelb, grün, blau). Das Problem ist: das Dialogfeld wird mit Hilfe des Resourceneditors angelegt (und daran kann ich auch nichts ändern, weil ich eine bestehende Software weiterentwickle und deren Grundgerüst nicht ändern soll), und dieser bietet keine Möglichkeit zur Farbeinstellung. Auch in der CDialog-Klasse der MFC habe ich keine Einstellmöglichkeiten für die Farbe gefunden (wie es sie etwa unter Delphi in der TForm-Klasse gibt).

Auf Anraten eines Kollegen hin habe ich das Problem bisher provisorisch so gelöst, daß ich ein in der gewünschten Farbe ausgefülltes Rechteck auf das Dialogfenster gezeichnet habe, das gerade genauso groß wie Fenster ist. Eine sonderlich elegante Lösung ist das aber nicht gerade, zumal Fensterelemente wie Textfelder in der Ausgangsfarbe bleiben, was nicht besonders schön aussieht.

Gibt es eine andere Möglichkeit, die Farbe von Dialogfeldern zu verändern?

ScottManDeath
2005-03-30, 14:19:45
Du musst auf die WM_CTLCOLOR message reagieren.


There is no direct method to set the background color of a dialog box.

However, you can do by the following method,

Create a CBrush member variable for the CDialog derived class

CBrush m_pbkBrush;

in OnInitDialog create the brush with a suitable color

m_pbkBrush.CreateSolidBrush(RGB(255,0,0));

add WM_CTLCOLOR message map and make the following changes in the message

handler function

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

{

HBRUSH hbr;

if (nCtlColor == CTLCOLOR_DLG)

hbr = (HBRUSH)m_pbkBrush.GetSafeHandle();

else

hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

return hbr;

}

and whereever you want the background to be changed like your button click,

delete the old brush object and recreate with the new color and call

Invalidate()

m_pbkBrush.DeleteObject();

m_pbkBrush.CreateSolidBrush(RGB(0,255,0));

Invalidate();





Quelle (http://www.eggheadcafe.com/ng/microsoft.public.dotnet.languages.vc.libraries/post18286225.asp) im unteren Teil