Schriftfarbe von Buttons ändern



  • Hi,
    wie kann ich die Schriftfarbe von einzelnen Buttons verändern?
    Hab lange gesucht, doch nichts hat funktioniert.
    Bitte mit Beschreibbung, wo der Code einzugeben ist.
    Danke



  • Google hätte dir auch Antworten auf deine Frage gegeben. Aber na ja wenn man selber nicht Suchen kann lässt man anderen das machen, bzw die Antwort geben.

    .h:
    CFont m_Font;
    //.cpp:
    LOGFONT lf;
    	::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);
    
    	CClientDC dc(this);
    	strcpy(lf.lfFaceName, "times new roman");
    	lf.lfHeight = -MulDiv(13, GetDeviceCaps(dc.m_hDC, LOGPIXELSY), 72);
    
    	m_Font.CreateFontIndirect(&lf);
    	m_Button.SetFont(&m_Font);
    

    Dabei muß m_Font ein Member deiner Windowklasse sein, also kannst du nicht lokal in der Funktion erstellen, weil die sonnst wieder weg ist wenn die Funktion beendet ist. Ales klar?



  • Nee nix klar....

    Wo soll ich das jetzt einfügen?

    In der WinMain?
    Oder WinForms?



  • WinForms bist du dir sicher dasd du MFC benutzt oder doch nicht .net? wenn du .net benutzt is das mal so das falsche Forum dann solltest du dich mal nach cli/.net verschieben lassen. an sonnsten gehört das natürlich in die mainframe-klasse also da wo du dein Button generierst.



  • Der mit dem WinForms war ein anderer Typ, der sich so genannt hat wie ich....

    CTecS schrieb:

    Google hätte dir auch Antworten auf deine Frage gegeben. Aber na ja wenn man selber nicht Suchen kann lässt man anderen das machen, bzw die Antwort geben.

    .h:
    CFont m_Font;
    //.cpp:
    LOGFONT lf;
    	::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);
    	
    	CClientDC dc(this);
    	strcpy(lf.lfFaceName, "times new roman");
    	lf.lfHeight = -MulDiv(13, GetDeviceCaps(dc.m_hDC, LOGPIXELSY), 72);
    	
    	m_Font.CreateFontIndirect(&lf);
    	m_Button.SetFont(&m_Font);
    

    Dabei muß m_Font ein Member deiner Windowklasse sein, also kannst du nicht lokal in der Funktion erstellen, weil die sonnst wieder weg ist wenn die Funktion beendet ist. Ales klar?

    Also ich hab sowas schon gefunden, allerdings nutze ich einerseits Dialog, da gibts ja kein Mainframe und wenn ichs unter CXXXDLG packen will, klappts allerdins auch nicht...
    Ich bin total neu in Visual studio und kapier einfach nie, wo ich was eingeben muss, hab vorher einfach mit dev-cpp gearbeitet, da gabs sowas mit ressourcen garnicht....



  • den teil von .cpp packst du einfach in die Oninit() deines Dialoges, und m_Button ist eine Membervariable vom Typ CButton auf den Button der den Font bekommen soll



  • dann kommt noch folgender fehler:

    error C2664: 'strcpy': Konvertierung des Parameters 1 von 'WCHAR [32]' in 'char *' nicht möglich

    habs leider nicht hinbekommen, das richtigzu machen.
    kann mir bitte noch einmal geholfen werden ? o:)
    Danke


  • Mod

    Du hast ein Unicode/MBS Problem.
    Deine Windows API Lib wil alles in Unicode (wchar_t) aber Du lieferst MBCS (char)!
    Benutze TCHAR, das geht immer.

    _tcscpy(lf.lfFaceName, _T("times new roman"));
    

    PS: Diese Frage beantworten wir hier in jeder dritten Positing.



  • danke,
    nun ändert sich zwar der font, aber die farbe nun doch nicht.
    ich dachte ich könnte nun einfach ne zeile hinzufügen die das tut, ist aber nicht so
    wie änder ich denn nun die farbe?


  • Mod

    Dir Farbe ändert man nicht mit dem Font, sondern durch Behandlung von WM_CTLCOLORBTN (aber Achtung, es geht nicht alles).
    http://msdn.microsoft.com/en-us/library/bb761849(VS.85).aspx



  • also war alles vorher umsonst? 😕
    kannst du auch da mal sagen wo ich das hinschreiben muss, am besten mit beispiel?
    Danke


  • Mod

    Du behandelst die Nachricht im Parent. Oder Du benutzt Reflection.
    CWnd::OnCtlColor http://msdn.microsoft.com/de-de/library/0wwk06hc(VS.80).aspx
    TN062 http://msdn.microsoft.com/en-us/library/eeah46xd(VS.71).aspx

    Du findest genug Code und Diskussionen darüber auch in diesem Forum.



  • Hö, ich brauch das wirklich genauer
    bin mit meinem programm fertig, bis auf die blöde farbe und ich check da wirklich rein garnichts.
    sorry für die blöden fragen, aber ich kapier das ganze hier mit nicht, ich brauch mal ein Bsp hiervon:

    WM_CTLCOLORBTN

    WPARAM wParam
    LPARAM lParam;

    was bedeutet dieses WPARAM wParam , LPARAM lParam;
    finde nichts dazu und weis auch nicht wie ich das bei mir anwenden kann.
    wenn ich zb eine einfach rote schrit auf meinem button haben möchte, auf dem zb die zahl "1" steht, wie mach ich das jetztß
    suche schon ewig danach, wie gesagt, hab noch kein plan von windows programmierung, konnte mit devcpp recht gut in der konsole programmieren aber dashier ist so viel komplizierter 😞
    also, bitte ein Bsp
    MfG



  • keiner ne idee?



  • was erwartest du für eine Antwort wenn auf der seite alles steht?

    Parameters

    wParam
    A handle to the display context for the button.
    lParam
    A handle to the button.

    das erste ist der DC auf deinen button und das zweite ein Handle auf den button selbst.



  • Ich habe jetzt dieses hier:

    HBRUSH CGUEDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) //Funktion eingefügt für Listboxfarbe
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Attribute des Gerätekontexts hier ändern

    if (pWnd->GetDlgCtrlID()==IDC_BUTTON20){
    pDC->SetTextColor(RGB(178,34,34));

    }

    // TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll
    return hbr;
    }

    Allerdings passiert überhauptnichts. Die Schrift auf dem Buttons soll ja rot sein, aber sie bleibt schwarz.

    Was muss ich machen damit diese rot wird?



  • habs jetzt fast.
    jetzt kommt aber wieder sowas:
    konvertierung des parameters 3 von 'tchar[512]' in 'const char *' nicht möglich - C2664

    const int bufSize = 512;
    TCHAR buffer[bufSize];
    if (state & ODS_DISABLED)
    pDrawnObj->DrawText(pDC, btnRect, buffer, GetDisabledColor());

    Danke



  • warum ist denn das so unheimlich schwer? 😢
    ich bin schon sooooo lange dabei, ich hab ne möglichkeit gefunden nach nem tutorial per ownerdraw oder sowas, aber einerseits werden die buttons dadurch ecking und andererseits dauert das ewig.

    ich will nur ganz einfach die schriftfarbe auf dem button ändern, in delphi geht das mit einem klick.
    also von so:
    http://www.imagebanana.com/img/aw7qkes/shiz.JPG
    auf so:
    http://www.imagebanana.com/view/feieh6xt/shiz2.JPG

    hab das einfach mit dem ressourceneditor gemacht, hier wird doch jemand wissen wie das geht? :o



  • na wurden doch nun schon alle möglichkeiten genannt wie man die farbe setzen kann, is halt nun mal kein delphi oder c# wo man das mal klicki in nem editor oder per Funktion ändern kann, schau bei codeproject.com vorbei da findeste sicher auch ne klasse die entsprechende Funktionen hat.



  • es funktioniert einfach nichts...................................................

    HBRUSH CAnswer::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    if(pWnd->GetDlgCtrlID() == IDC_BUTTON1)
    pDC->SetTextColor(RGB(53,97,220));
    return hbr;
    }

    das hab ich gefunden, bringt nichts, genauso we ales andere...
    bittte hilfe.. ich kapiers einfach nicht.......


Anmelden zum Antworten