Schrift vergrößern



  • 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



  • ja ok

    hab ich soweit gemacht
    auch keine fehler mehr

    aber 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....


Anmelden zum Antworten