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 ausHBRUSH 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