Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Problem bei setzen der Farbe eine CButton

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
21.09.2005, 11:32 Uhr
commanderberry



Hallo,

erstmal großes Lob an dieses Forum, hat mir schon oft geholfen! nur diesmal komme ich irgendwie nicht weiter.

In den bisherigen Beiträgen steht immer, dass in zum ändern die Function "OnCtlColor" überschreiben muss. Leider finde ich diese bei mir nicht...

Ich erzähl mal kurz was ich habe:
- ein Dialogfeld (IDD_DISPLAYNAME) indem der Anwender per Klick auf einen Button ein CColorBox-Dialog angezeigt bekommt. Den Rückgabewert (COLORREF) würde ich nun gerne als Hintergrundfarbe für den Button verwenden, so dass der Anwender sieht, welche Farbe er ausgewählt hat (nachdem der ColorDialog weg ist)

Für den Dialog habe ich eine eigene Klasse (CDialogDisplayName abgeleitet von CDialog)) mit einer Membervariablen "m_crFontColor" angelegt. Der Klassenassistent zeigt mit allerdings bei Auswahl der ObjectID 'CDialogDisplayName' keine Message 'WM_CTLCOLOR' oder ähnliches an.

Nun meine Frage: Wie kann ich erreichen, dass die Button Farbe sich ändert. Muss ich eine eigene Button-Klasse ableiten? Wenn ja, wie/wo rufe ich die dann auf bzw. bine sie ein?

Vielen Dank für eure Hilfe!

gruß berry

Dieser Post wurde am 21.09.2005 um 11:53 Uhr von commanderberry editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.09.2005, 13:51 Uhr
commanderberry



Keine Ahnung, warum die Message 'WM_CTLCOLOR' nicht da war. Ich habe die Klasse gelöscht und neu erstellt, nun ist sie da

Jezt habe ich das nächste Problem: Die Farbe des Buttons ändert sich nicht

Bei Klick auf den zu färbenden Button rufe ich einen Farbauswahldialog auf und speichere die Fareb in der membervariablen 'm_crColor'

C++:
void CDisplayName::OnColorbtn()
{
    CColorDialog* cdColorDialog    = new CColorDialog;
    if (cdColorDialog->DoModal() == FALSE)
        return;
    m_crColor = cdColorDialog->GetColor();
}



Die Funktion 'OnCtlColor' sieht so aus: (Der zu ändernde Button hat die ID: 'IDC_COLORBTN')


C++:
HBRUSH CDisplayName::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);    
    if(pWnd->GetDlgCtrlID() == IDC_COLORBTN) {
        COLORREF color=RGB(255,0,0);
        pDC->SetTextColor(color); //<-- ändert weder Text noch Backgroundcolor..
        pDC->SetBkColor(color);
    }

    return hbr;
}



Weiß jemand Rat?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.09.2005, 14:32 Uhr
commanderberry



Also... irgendwie bin ich wohl der einzig Aktive in diesem Thread..
naja egal..

habe in diesem forum folgendes gefunden http://fun-soft.ra-doersch.de/index.php?mod=forum&kuerzel=archiv&action=thread&id=1651&PHPSESSID=lr2gv4b35kal925sers4dvb960

Da könnt Ihr die Methode OnCtlColor überschreiben, bis Ihr schwarz werdet, aber an der Farbe der Schaltflächen wird sich nichts ändern....

Zitat aus der MFC-FAQ von Microsoft.....

"If you want to change the color of a dialog button, you have to use owner-draw button. (you can use bitmap buttons) Changing the color through OnCtlColor() will not work for buttons."

weiß zwar noch nicht was ich in die pain methode schreiben soll, aber ich versuchs erstmal..
falls sich doch noch jemand beteiligen möchte, bin ich dankbar!

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.09.2005, 14:43 Uhr
Tommix



Hallo,
für sowas ist CodeGuru eine gute Adresse:
www.codeguru.com/Cpp/controls/buttonctrl/

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.09.2005, 17:59 Uhr
commanderberry




Zitat von Tommix:
Hallo,
für sowas ist CodeGuru eine gute Adresse:
www.codeguru.com/Cpp/controls/buttonctrl/

Gruß, Tommix


Danke, aber das ist alles ziemlich aufwändig.. Dann gehts eben erstmal mit einfarbigen Button, wird event. später ergänzt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.09.2005, 19:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, du darfst nicht WM_CTL_COLOR nehmen, das wird nur im Hauptfenster aufgerufen. Was du brauchst ist diese =CTL_Color (so stehts bei mir im Klassenassi drin). also die ON_WM_CTLCOLOR_REFLECT-Variante
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.09.2005, 09:16 Uhr
~AS
Gast


Guten Tag,

@commanderberry


Zitat von MSDN:

OnCtlColor must return a handle to the brush that is to be used for painting the control background.



Also egal ob jetzt WM_CTL_COLOR oder ON_WM_CTLCOLOR_REFLECT richtig ist, der Rückgabewert muss ein Handle auf die Hintergrundfarbe sein, damit sich der Hintergrund einfärbt.

mfg
AS
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.09.2005, 11:07 Uhr
commanderberry



dank dir!
werde das am wochenende mal probieren!

gruß
 
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: