Schriftart des Buttontextes



  • Hallo Forum

    ich habe ein Problem mit der selbstgesetzen Schrift eines Buttons. Ich möchte, nachdem der Button benutzt wurde, seine Schrift ändern. Das mache ich folgendermaßen:

    m_font.CreateFontA(8,10,0,0,FW_NORMAL,FALSE,FALSE,FALSE,0,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"Times New Roman");
    

    ...

    CClientDC dc(this);
    		CFont* newFont = dc.SelectObject(&m_font);
    		GetDlgItem(IDC_LOADIMPLANT_BN)->SetFont(newFont);
    

    Mein Problem ist, egal welchen Wert ich bei Höhe und Breite angebe, der Text auf meinem Button immer der gleiche bleibt (also nicht die Worte, sondern das Aussehen). Was mache ich da falsch? Warum ändert sich die Größe der Schrift nicht? Bzw. würde ich eigentlich nur gerne die Schrift in fett darstellen, und sonst gar nichts ändern wollen. Geht das einfacher als so?

    Danke für eure Hilfe!



  • habe den Code mal nachvollzogen und einen TestDialog mit UniCode erstellt
    und einen Button hinzugefügt (IDC_BUTTON1).

    BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_BN_CLICKED(IDC_BUTTON1, &CTestDlg::OnBnClickedButton1)
    END_MESSAGE_MAP()
    
    void CTestDlg::OnBnClickedButton1()
    {
       CFont m_font;
       m_font.CreateFont(8,10,0,0,FW_NORMAL,FALSE,FALSE,FALSE,0,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
                         DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Times New Roman")); 
    
       CClientDC dc(this); 
       CFont* newFont = dc.SelectObject(&m_font); 
       GetDlgItem(IDC_BUTTON1)->SetFont(newFont);
       m_font.DeleteObject();
    }
    

    Der Code wird bei mir fehlerfrei ausgeführt,
    beachte aber das ich CreateFont verwende und nicht CreateFontA,
    dann muss der letzte Parameter (Fontart) entsprechend geändert werden.



  • Vielen Dank für deine Hilfe. Allerdings ist mein Problem nicht, dass ich es nicht angezeigt bekomme, das funktioniert bei mir schon auch, mein Problem ist, dass die Schrift nicht auf meinen Button draufpasst. Ich habe versucht die ersten beiden Parameter (height, width) zu ändern, aber es tut sich nichts. Die Schrift bleibt immer gleich, und wird nicht komplett auf dem Button angezeigt, da der Button zu klein zu sein scheint.

    Nochmal zusammengefasst:

    m_font.CreateFont(16,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,0,OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Times New Roman"));
    

    und

    m_font.CreateFont(8,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,0,OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Times New Roman"));
    

    zeigt genau das gleiche auf meinem Button an, obwohl die Höhe doch einmal 16 und einmal 8 sein sollte. Und desweiteren wird der Schriftzug nicht komplett auf dem Button angezeigt, sondern nur zum Teil, weil der Schriftzug zu groß ist. Was muss ich da ändern? Ich dachte das so verstanden zu haben, dass man die Größe der Schrift mit width und height ändern kann. Warum funktioniert das nicht?

    Danke!



  • Versuch mal das:

    HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	if(pWnd->GetDlgCtrlID() == IDC_BUTTON1)
        {
    
    		CFont m_font;
    		m_font.CreateFontW(35,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,0,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
    						 DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,_T("Times New Roman"));
    		pDC->SelectObject(&m_font);
        }
    
    	return hbr;
    }
    

    Du musst OnCtlColor() anlegen.

    Hier findest du einiges zu dem Thema
    http://www.coding-help.de/steuer_allg.html#Farbige_Steuerelemente



  • Habe ich ausprobiert,funktioniert leider nicht. Ich glaube mich auch daran zu erinnern hier im Forum mal etwas gelesen zu haben dass genau diese Anwendung nicht für Buttons funktioniert und man daher die Buttons selbst zeichnen muss. Daher würde ich schon gerne nur die Schrift in fett ändern und das wars. Aber das scheint auch nicht soviel einfacher zu sein.



  • Dann hab ich einen magischen Compiler...bei mir geht es problemlos. Die schrift wird auf Größe 35 (bei klick) geändert.



  • Eine Ander möglichkeit wäre noch dies hier

    BOOL CTestDlg::OnInitDialog()
    {
    SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
    SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
    
        cFont.CreateFont(25, 0, 0, 0, FW_BOLD, 0, 1, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, _T("Comic Sans MS"));
    
        GetDlgItem(IDC_BUTTON1)->SetFont(&cFont);
    
    return TRUE;
    }
    

    cFont ist als Membervariable angelegt worden. Dies sollte also gehen.
    Wenn man cFont nur in der Funktion anlegt, dann ist cFont späte nicht mehr da, weil funktionsgebunden (oder so).


Log in to reply