Schrift vergrößern
-
SetTextColor(m_Kraft,RGB(0,255,255));
m_Kraft ist ein Control vom Textfeld
-
Äh, ich weiß nicht, ob das so gehen könnte.
Ich wollte eigentlich das komplette OnCtlColor haben, dann kann ich besser gucken, was da falsch gelaufen ist.
-
also die Funktion übernimmt doch nur einen RGB Wert! Oder? Dachte ich zumindest!
Du musst ne Abfrage machen ob jetzt grad gewünschtes Control kommtif (pWnd->GetDlgCtrlID() == IDC_Kraft)
so und in der if kannste jetzt allgemein sagen der Text hat die Farbe ...
pDC->SetTextColor(RGB(0,255,255));
pDC ist wie du schon richtig gesagt hast ein Member CDC das von der OnCtlColor kommt!
-
mit OnCtlColor hab ich es nicht versucht, weil ich mit CDC nicht weiterwusste
hab einfach nur SetText gemacht
-
also ich hab jetzt folgendes:
ein Textfeld Namens "IDC_Kraft"
darauf ist eine Membercontroll namens m_Kraft
ansonsten hab ich nur schriftgroesse gemacht
schrift.CreateFont(20, 0, 0, 0, 200, 0, 0, 0, 1, 0, 0, 1, 2, "Arial");
an farbe hab ich jetzt noch gar nichts gemacht
-
du musst ihm ja irgendwo sagen was er denn einfärben soll, und das macht man gewöhnlich in der OnCtlColor. Erzeug sie über den Klassenassi und dann mach was ich oben geschrieben hab und du wirst merken dass das gar nciht so schwer ist, wenn man erst mal drin ist.
-
... da war Polofreak schneller.
Also, versuch erstmal das in OnCtlColor und wenns nicht geht, zeig mal, was du (zum Thema Farbe, der Font funktionierte ja) gemacht hast.
-
jo, klappt
und wenn ich jetzt verschiedene in anderen farben während der laufzeit ändern möchte, mach ich die ganze sache einfach dynamisch oder wie?
sprich; ich übergebe im das Steuerelement und die 3 farben, gell?
-
Pro Steuerelement eine.
Aber im Prinzip hast du Recht.
-
hab das jetzt so versucht:
void CAFKWin32XPDlg::OnButton4() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen OnCtlColor(NULL,NULL,NULL,150,243,250); }
HBRUSH CAFKWin32XPDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor, int R,int G, int B) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID() == IDC_Kraft) pDC->SetTextColor(RGB(R,G,B)); // TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll return hbr; }
hängt sich aber auf
-
wo hängt er sich denn auf?
Dann ist es einfacher! Was für eine Meldung bekommst du ??
-
Die Standardt Meldung von Windows mit den Buttons "Senden" und "Nicht Senden"
-
ich will ja nur, dass sich die farbe auf rot,blau oder grün ändert, wenn ich die entsprechenden buttons klicke
-
Ändere NIEMALS die Anzahl der Parameter von Message-Handlern!
Nicht:HBRUSH CAFKWin32XPDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor, int R,int G, int B)
sondern
HBRUSH CAFKWin32XPDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
Mach den COLORREF (RGB-Wert) als Membervariable und belege den in der jeweiligen OnBtnFarbe mit dem passenden Wert, der Rest müßte von alleine gehen.
-
ja ok
das hab ich jetzt soweit gemacht
int Blau; int Rot; int Gelb;
HBRUSH CAFKWin32XPDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID() == IDC_Kraft) pDC->SetTextColor(RGB(Rot,Gelb,Blau)); // TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll return hbr; }
nur wie ruf ich die funktion jetzt auf, wenn ich die farbe ändern will über den button?
das ich rot,gelb und blau vorher mit werten belegen muss, das is klar
aber ich hab weder eine initialisierung für pDC noch für pWnd
-
OnCtlColor wird automatisch autogerufen, wenn ein Control gezeichnet werden muss.
Das ist im Prinzip folgendes:
"Hallo Programm! Ich male jetzt das Control hier (pWnd), wie soll ich das einfärben? Gib mir mal die richtigen Stifte (pDC belegen, hbr zurückgeben)."Also fülle einfach in der OnBtnBlau und den anderen Button-Funktionen die Farbwerte und probiers aus.
-
wenn es nur drei Farben sind dann mach doch so was
#define WHITE RGB(255,255,255) #define BLACK RGB(0,0,0) #define RED RGB(222,0,49) #define GREEN RGB(100,255,100) #define GRAY RGB(140,140,140)
dann machste ne Membervariable z.B. vom Typ int dann frägste in der OnCtrlColor ab
if(intMember == 1) pDC->SetTextColor(WHITE);
bzw mit switch
Die Funktion brauchst du nicht explizit aufrufen, immer wenn neugezeichnet wird, wird die Funktion aufgerufen (bei Buttonclick wird neu gezeichnet)
-
hää?
ich rall grad gar nichts mehr
muss ich dann die funktion einfach in den button reinpacken oder wie?
hab das jetzt so
void CAFKWin32XPDlg::OnButton4() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen //OnCtlColor(NULL,NULL,NULL,150,243,250); Rot = 150; Gelb = 200; Blau = 150; HBRUSH CAFKWin32XPDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID() == IDC_Kraft) pDC->SetTextColor(RGB(Rot,Gelb,Blau)); TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll return hbr; } }
-
void CAFKWin32XPDlg::OnButton4() { Rot = 150; Gelb = 200; Blau = 150; RedrawWindow(); }
-
nur wenn der Button gedrückt wird soll der Text gefärbt werden?
dann mach ne Bool Member die du true setzt OnButton4
die OnCtrlColor bleibt wo sie war, nicht in die OnButton die wird schon von selbst aufgerufen (vertrau der MFC) in der OnCtrlColor machste dann noch in deine if blabla IDC_Kraft && deine Boolmember == TRUE