OnCtlColor(...) macht alles wie erhofft, nur Buttons nicht



  • Hallo Leute!

    ich hab keine Ahnung, warum er alles einfärbt, außer die Buttons. Ich hoffe es ist nur eine Einstellungssache.
    Der Code sieht so aus

    HBRUSH AuswertungDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
        if(nCtlColor == CTLCOLOR_DLG) 
        { 
            hbr = CreateSolidBrush(RGB(66,113,166));//Hintergrund in Blau 
            pDC->SetBkMode(TRANSPARENT);
        }
    
        if(pWnd->GetDlgCtrlID() == IDC_BUTTON_WIN) 
        { 
            hbr = CreateSolidBrush(RGB(0,255,0));//Button soll grün werden 
            pDC->SetBkMode(TRANSPARENT);
        }
    
        if(pWnd->GetDlgCtrlID() == IDC_BUTTON_LOST) 
        { 
            hbr = CreateSolidBrush(RGB(255,0,0));//Button soll rot werden 
            pDC->SetBkMode(TRANSPARENT);
        }
        else 
        { 
            hbr = CreateSolidBrush(RGB(66,113,166));//Textfelder in Blau 
            pDC->SetBkMode(TRANSPARENT);
        }
    
    	return hbr;
    }
    

    Ermacht den Dialog blau und die TExtfelder, aber die Buttons bleiben unberührt. Im Debugger sieht man, dass er vor dem anzeigen des Diaoges definitiv mehrmals durch die Funktion geht und dabei auch immer in den "Button"-Zweigen zu finden ist. Aber einfärben will er sie anscheinend nicht.

    Vielen Dank für Eure Hilfe.

    Ranger



  • Bei Buttons geht das nicht über die OnCtrlColor. Du musst dir eine eigene Klasse von CButton ableiten und deren Zeichenfunktion überschreiben (Stichwort OwnerDraw-Button).
    Andere Möglichkeit: www.codeproject.com oder www.codeguru.com
    Da gibts bereits fertige Klassen.



  • Danke Dir!

    Ich hab das auch schon so ähnlich im Netz gelesen, haben aber vor nicht alzu langer Zeit auf Windows CEmal was probiert und dort funktioniert es eben auch auf die Funktion OnCtrlColor(...). Ich habe vermutet, wenn es da geht müsste es im allumfassenden MFC auch funktionieren. So kann man sich täuschen.

    Vielen Dank nochmal,

    Ranger


Anmelden zum Antworten