M
Hi!
Ich möchte in meinem Programm die Farbe von 12 Buttons während der Laufzeit ändern.
Die Farbe ändere ich in der OnCtlColor. Die Farbe wird verändert sobald ich eine USER Message bekomme.
Ich habe versucht mit Invalidate, Invalidaterect und UpdateWindow die Buttons neu zeichnen zu lassen, aber nichts passiert!
Nur wenn ich das Fenster verstecke mit ShowWindow(SW_HIDE) und dann wieder mit ShowWindow(SW_Show) anzeigen lasse werden die Buttons wie gewünscht gefärbt!
Allerdings wird dann jedesmal das gesamte Bild neugezeichnet und es flackert und der Hintergrund scheint durch!
Was kann man noch machen? ist dringend!
hier die OnCtlColor Methode:
HBRUSH CDlgServiceCall::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//StandardBrush, wie in InitInstance in SetDialogBkColor definiert
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch(pWnd->GetDlgCtrlID())
{
case IDC_BUTTON_D1left:
{
if(DeskLeft[0])
return m_brush_yellow;
else
return m_brush_white;
}
break;
case IDC_BUTTON_D1right:
{
if(DeskRight[0])
return m_brush_yellow;
else
return m_brush_white;
}
break;
.
.
.
if (pWnd->GetDlgCtrlID() == IDC_STATIC_Headline) //CTLCOLOR_DLG = Dialog
{
pDC->SetTextColor(RGB(255,255,255)); // ** Textfarbe **
pDC->SetBkMode(TRANSPARENT); // Modus:bei Transparent wird Set BK Color ingnoriert
// pWnd->SetFont(&font, TRUE);
}
if (nCtlColor == (UINT)CTLCOLOR_STATIC) //CTLCOLOR_DLG = Dialog
{
pDC->SetTextColor(RGB(255,255,255)); // ** Textfarbe **
pDC->SetBkMode(TRANSPARENT); // Modus:bei Transparent wird Set BK Color ingnoriert
}
//Hintergrund Rot färben
return( (HBRUSH) m_brush_red.GetSafeHandle());
}
diese Methode fängt Nachrichten ab und soll die ONCtlColor aufrufen
void CDlgServiceCall::OnSetServiceCall(int side, int pult)
{
// ShowWindow(SW_SHOW);
// ::InvalidateRect(m_hWnd, NULL, TRUE);
ShowWindow(SW_HIDE);
if(side==1)
{
DeskLeft[pult-1]=TRUE;
}
else
{
DeskRight[pult-1]=TRUE;
}
//Neuzeichnen
// OnPaint();
//Invalidate();
// CButton Button1;
// Button1.GetDlgItem(IDC_BUTTON_D1left);
// RedrawWindow(NULL, NULL, RDW_INVALIDATE);
// UpdateWindow();
ShowWindow(SW_SHOWNA);
}