Schrift vergrößern
-
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
-
ja ok
hab ich soweit gemacht
auch keine fehler mehraber muss ich die denn jetzt nicht in einen timer reinpacken?
weil so wie ich das jetzt verstanden habe, ruft er die doch nur einmal beim start des programms auf, oder?
-
nein bei jedem neuzeichnen! Beim mini-Maximieren, beim drop down einer Combobox bei Buttonclicks ... setzt doch mal einen Breakpoint drauf und schau mal wie oft du an die Stelle kommst, dann siehste das ziemlich schnell! Ist denn Jetzt dein Text wie du ihn willst?
-
Genau, das mit dem Breakpoint ist ne gute Möglichkeit.
Besser ist allerdings ein TRACE, weil dann das Programm nicht angehalten wird.if (pWnd->GetDlgCtrlID() == IDC_Kraft) { pDC->SetTextColor(RGB(Rot,Gelb,Blau)); TRACE("Farbe für IDC_Kraft\n"); }
Und dann per F5 starten und die Ausgabe im Auge behalten.
-
BOOL farbe;
farbe = FALSE; // OnInitDialog
HBRUSH CAFKWin32XPDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (pWnd->GetDlgCtrlID() == IDC_Kraft && farbe == TRUE) pDC->SetTextColor(RGB(Rot,Gelb,Blau)); // TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll return hbr; }
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 = 0; Blau = 0; farbe = TRUE; }
aber wird nicht rot *wein*
-
Nur um mal sicherzugehen: Das Edit ist nicht disabled? Weil dann geht das leider nicht.
Funktioniert das färben denn so?
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; }
-
jo, so funzt es
-
ist aber ein Textfeld, kein Eingabefeld
-
Ah, also ein Static.
...sollte egal sein.Nächster Versuch:
HBRUSH CAFKWin32XPDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if ((pWnd->GetDlgCtrlID() == IDC_Kraft) && (farbe == TRUE)) pDC->SetTextColor(RGB(Rot,Gelb,Blau)); // TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll return hbr; }
-
nö, daran hats leider auch nicht gelegen *ggg*
aber wer weiß, wo man manchmal klammer setzt, hilft es echt weiter
-
ker, warum gibt es keine stinknormale funktion, die ich einfach aufrufen kann????
irgendwie in einem button oder so
GetDlgItem(IDC_Kraft)->SetTextColor(red);
und fertig....
-
Gehts jetzt oder nicht?
Den bool brauchst du doch auch gar nicht, Hauptsache Rot, Geld und Blau sind richtig gefüllt, oder?
Achja, hast du daran gedacht, die z.b. jeweils mit 0 zu initialisieren?
-
neee, funzt nicht
ja, an das initialisieren habe ich auch gedacht
wird eigentlich normalerweise im konstruktor gemachthab es aber mal ausnahmsweise in die OnInitDialig mit reingenommen
-
Ist das Projekt sehr groß oder geheim? Sonst schick es mir mal - eigentlich müßte der kleine Bool nix mehr kaputt machen...
estartu_de@c-plusplus.net
-
jo, is da eigentlich
-
HBRUSH CCAFKWin32XPDlgDlg::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 CCAFKWin32XPDlgDlg::OnButton1() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen Rot = 0; Gelb = 0; Blau = 255; Invalidate(); }
So ist es zu Anfang Rot und wenn ich den Knopf gedrückt habe Blau.
Das wolltest du doch, oder?
-
krasse sache
es funktioniert *gg*
dankeschönaber was hat das
Invalidate()
zu bedeuten?
-
neuzeichnen
MSDN sagt:Invalidates the entire client area of CWnd. The client area is marked for painting when the next WM_PAINT message occurs. The region can also be validated before a WM_PAINT message occurs by the ValidateRect or ValidateRgn member function
@Estartu ich war schneller :p