Schriftart ändern



  • Hi,

    ich arbeite seit 1 Woche mit C++ (Visual C++ 6, Windows) und will jetzt etwas anspruchsvoleres machen. Deshalb werde ich euch noch öfter nerven 😉

    Also zu meiner ersten Frage: Kann mir jemand erklären, wie ich eine Schriftart formatieren kann? Also der Text Willkommen in meinem Projekt soll z.B. Times und Kursiv und 20 sein... Aber wieder ein anderer Fett Arial 12 usw. Ich weiß, dass es mit der Funktion onpaint geht, doch nicht wie 😕

    Danke schon mal.

    Stephan



  • Servus,

    das machst du am besten mit CFont::CreateFont. Einfach in der MSDN nach CreateFont suchen dann wird dir das kurz erklärt.

    Hier ein Bsp:

    CFont font;
    VERIFY(font.CreateFont(
       12,                        // nHeight
       0,                         // nWidth
       0,                         // nEscapement
       0,                         // nOrientation
       FW_NORMAL,                 // nWeight
       FALSE,                     // bItalic
       FALSE,                     // bUnderline
       0,                         // cStrikeOut
       ANSI_CHARSET,              // nCharSet
       OUT_DEFAULT_PRECIS,        // nOutPrecision
       CLIP_DEFAULT_PRECIS,       // nClipPrecision
       DEFAULT_QUALITY,           // nQuality
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
       "Arial"));                 // lpszFacename
    
    m_MemberVonEinemEdit.SetFont(&font);
    

    Ich habe hier einfach mal eine Membervariable vom Typ CEdit genommen. Ich habs noch nie ausprobiert sollte aber so funzen.

    Einfach mal rumspielen...

    *winke*
    Hellsgore

    EDIT:
    Bevor du fragst 😃 , hier noch ein Link wie man die Schriftfarbe ändern kann. Ist aus der FAQ:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39050



  • Hmm, ok ich habe das gefunden, doch wo muss ich das einfügen und was muss ich noch machen?
    😕
    Danke schon mal...

    Stephan



  • Ganz einfach...
    Du fügst es dort ein, wo du es brauchst. Das kann ich dir schlecht sagen wann du es verwenden sollst, solange ich nicht weiss zu welchem Zeitpunkt du es verwenden willst.

    Bsp.: Bei einem Druck auf eine Taste soll der neue Font auf ein Control eingesetzt werden. Dann machst du das so:

    void CDeinDlg::OnBnClickedButtonTest()
    {
    CFont font;
    VERIFY(font.CreateFont(
       12,                        // nHeight
       0,                         // nWidth
       0,                         // nEscapement
       0,                         // nOrientation
       FW_NORMAL,                 // nWeight
       FALSE,                     // bItalic
       FALSE,                     // bUnderline
       0,                         // cStrikeOut
       ANSI_CHARSET,              // nCharSet
       OUT_DEFAULT_PRECIS,        // nOutPrecision
       CLIP_DEFAULT_PRECIS,       // nClipPrecision
       DEFAULT_QUALITY,           // nQuality
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
       "Arial"));                 // lpszFacename
    
    m_MemberVonEinemEdit.SetFont(&font); 
    }
    

    Dann sollte es schon funktionieren. Lass dich nicht von den vielen Parametern abschrecken. Das ist ein einfacher Funktionsaufruf, welchen du aufrufen musst (sollst) wenn du einem Control eine eigene Schrift geben willst.

    *winke*
    Hellsgore



  • hmm, dann definiere ich doch aber für alle Schriften das so, oder? Ich will aber 4 verschiedene "Fontarten", d.h. verschiedene variationen von Fonts Kursiv, Fett usw. und Farbe haben, die voreingestellt sind...



  • Nö machts nitt.

    Wenn du den Zeiger von font an ein Control übergibst dann über nimmt NUR dieses Control die Schrift. Wenn du jetzt noch eine schrift einfügen willst dann kopiere den kram, nenne die Var anstatt font, fontpeter und setze ein paar andere Parameter und gebe das dann ans nächste Control.

    *winke*
    Hellsgore



  • 😕



  • kann mir niemand helfen?

    // eidt:

    ich kapiere das net, ich mache erst wenig c++ 😞



  • Servus,

    Gucke mal nochmal eine ausführliche Erklärung von mir:

    CFont fSchriftTyp1;
    VERIFY(font.CreateFont(
       12,                        // nHeight
       0,                         // nWidth
       0,                         // nEscapement
       0,                         // nOrientation
       FW_NORMAL,                 // nWeight
       FALSE,                     // bItalic
       FALSE,                     // bUnderline
       0,                         // cStrikeOut
       ANSI_CHARSET,              // nCharSet
       OUT_DEFAULT_PRECIS,        // nOutPrecision
       CLIP_DEFAULT_PRECIS,       // nClipPrecision
       DEFAULT_QUALITY,           // nQuality
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
       "Arial"));                 // lpszFacename
    
    CFont fSchriftTyp2;
    VERIFY(font.CreateFont(
       12,                        // nHeight
       0,                         // nWidth
       0,                         // nEscapement
       0,                         // nOrientation
       FW_NORMAL,                 // nWeight
       FALSE,                     // bItalic
       FALSE,                     // bUnderline
       0,                         // cStrikeOut
       ANSI_CHARSET,              // nCharSet
       OUT_DEFAULT_PRECIS,        // nOutPrecision
       CLIP_DEFAULT_PRECIS,       // nClipPrecision
       DEFAULT_QUALITY,           // nQuality
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
       "Arial"));                 // lpszFacename
    
    /////////////////////////////////////////////////////////////////////
    
    //Jetzt öffnet sich dein Dialog und du willst verschiedene
    //Schriftarten für zwei verschiedene Controls haben, dann machst
    //du folgendes in der Func:
    
    BOOL CDeinDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
     /////////////////////////////////////////////////////
        m_MemberVonEinemEdit.SetFont(&fSchriftTyp1); // <--- Da passiert es
    
        m_MemberVonEinemStatic.SetFont(&fSchriftTyp2); // <--- Da passiert es nochmal
       ...
    ....
     return TRUE;
    }
    

    Jetzt wird nur in dem Dialog für das EINE Edit Control und für das EINE Static Control, die zwei verschiedenen Schrift angenommen. Der Rest bleibt gleich da passiert nichts. Alle Controls, ausser den beiden, haben den Standard Schrifttyp.

    Sollte aber jetzt verständlich sein 😃

    Wenn nitt --> Fragen!!!

    *winke*
    Hellsgore



  • Hi,

    und was muss ich einfügen, um die Schrift fett zu machen?

    Danke schon mal

    Stephan



  • Um die Schriftart fett zumachen musst du

    FW_NORMAL,                 // nWeight
    

    durch

    FW_BOLD,                 // nWeight
    

    ersetzen

    Mist auf die Sekunde zur gleich Zeit *gg*



  • *knüppel auspack* -> *schlag* -> *tret* -> *prügel* 😃

    Anstatt:

    VERIFY(fSchriftTyp2.CreateFont( 
    				12,                        // nHeight 
    				0,                         // nWidth 
    				0,                         // nEscapement 
    				0,                         // nOrientation 
    				FW_REGULAR,     
    ..
    

    nimmst du FW_BOLD

    VERIFY(fSchriftTyp2.CreateFont( 
    				14,                        // nHeight 
    				0,                         // nWidth 
    				0,                         // nEscapement 
    				0,                         // nOrientation 
    				FW_BOLD,
    

    Ich glaube mal das stimmt so *g* aber gucke mal in die MSDN unter CFont und dann CreateFont.... wird dort erklärt...

    *winke*
    Hellsgore



  • *kleinlautgeprügeltfühl* 😃

    MS Visual C++ 6 schrieb:

    --------------------Configuration: Test - Win32 Debug--------------------
    Compiling resources...
    Compiling...
    TestDlg.cpp
    G:\Stephan\Programme\Test\TestDlg.cpp(121) : error C2143: syntax error : missing ';' before 'do'
    G:\Stephan\Programme\Test\TestDlg.cpp(121) : error C2143: syntax error : missing ';' before '{'
    G:\Stephan\Programme\Test\TestDlg.cpp(121) : error C2447: missing function header (old-style formal list?)
    G:\Stephan\Programme\Test\TestDlg.cpp(121) : error C2143: syntax error : missing ';' before 'while'
    G:\Stephan\Programme\Test\TestDlg.cpp(138) : error C2143: syntax error : missing ';' before 'do'
    G:\Stephan\Programme\Test\TestDlg.cpp(138) : error C2143: syntax error : missing ';' before '{'
    G:\Stephan\Programme\Test\TestDlg.cpp(138) : error C2447: missing function header (old-style formal list?)
    G:\Stephan\Programme\Test\TestDlg.cpp(138) : error C2143: syntax error : missing ';' before 'while'
    G:\Stephan\Programme\Test\TestDlg.cpp(148) : error C2065: 'm_MemberVonEinemEdit' : undeclared identifier
    G:\Stephan\Programme\Test\TestDlg.cpp(148) : error C2228: left of '.SetFont' must have class/struct/union type
    G:\Stephan\Programme\Test\TestDlg.cpp(150) : error C2065: 'm_MemberVonEinemStatic' : undeclared identifier
    G:\Stephan\Programme\Test\TestDlg.cpp(150) : error C2228: left of '.SetFont' must have class/struct/union type
    Error executing cl.exe.
    Build : warning : failed to (or don't know how to) build 'C:\Dokumente und Einstellungen\Administrator\Desktop\button\RolloverButton.cpp'

    Test.exe - 12 error(s), 1 warning(s)

    😞 😕 😮

    wow.

    Was hab ich falsch gemacht?

    Danke schonmal

    Stephan



  • Poste mal den Code, wo der Font erstellt wird...

    du hast irgendwo ein Semikolon vergessen. Wahrscheinlich bei der letzten Klammer des CreateFont....

    Hellsgore



  • /////////////////////////////////////////////////////////////////////////////
    // CtestDlg message handlers
    CFont fSchriftTyp1; 
    VERIFY(font.CreateFont( 
       12,                        // nHeight 
       0,                         // nWidth 
       0,                         // nEscapement 
       0,                         // nOrientation 
       FW_NORMAL,                 // nWeight 
       FALSE,                     // bItalic 
       FALSE,                     // bUnderline 
       0,                         // cStrikeOut 
       ANSI_CHARSET,              // nCharSet 
       OUT_DEFAULT_PRECIS,        // nOutPrecision 
       CLIP_DEFAULT_PRECIS,       // nClipPrecision 
       DEFAULT_QUALITY,           // nQuality 
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 
       "Arial"));                 // lpszFacename 
    
    CFont fSchriftTyp2; 
    VERIFY(font.CreateFont( 
       14,                        // nHeight 
       0,                         // nWidth 
       0,                         // nEscapement 
       0,                         // nOrientation 
       FW_BOLD,                 // nWeight 
       FALSE,                     // bItalic 
       FALSE,                     // bUnderline 
       0,                         // cStrikeOut 
       ANSI_CHARSET,              // nCharSet 
       OUT_DEFAULT_PRECIS,        // nOutPrecision 
       CLIP_DEFAULT_PRECIS,       // nClipPrecision 
       DEFAULT_QUALITY,           // nQuality 
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 
       "Times New Roman"));       // lpszFacename 
    
    ///////////////////////////////////////////////////////////////////// 
    // Schriftarten definieren
    
    BOOL CtestDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    	SetWindowPos(&wndTopMost,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),0);
    
        m_MemberVonEinemEdit.SetFont(&fSchriftTyp1); // <--- Schriftart 1 
    
        m_MemberVonEinemStatic.SetFont(&fSchriftTyp2); // <--- Schriftart 2
    	// Add "About..." menu item to system menu.
    

    Danke schon mal 😃

    Stephan



  • Servus,

    BOOL CtestDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
        SetWindowPos(&wndTopMost,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),0);
    
    CFont fSchriftTyp1; 
    VERIFY(font.CreateFont( 
       12,                        // nHeight 
       0,                         // nWidth 
       0,                         // nEscapement 
       0,                         // nOrientation 
       FW_NORMAL,                 // nWeight 
       FALSE,                     // bItalic 
       FALSE,                     // bUnderline 
       0,                         // cStrikeOut 
       ANSI_CHARSET,              // nCharSet 
       OUT_DEFAULT_PRECIS,        // nOutPrecision 
       CLIP_DEFAULT_PRECIS,       // nClipPrecision 
       DEFAULT_QUALITY,           // nQuality 
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 
       "Arial"));                 // lpszFacename 
    
    CFont fSchriftTyp2; 
    VERIFY(font.CreateFont( 
       14,                        // nHeight 
       0,                         // nWidth 
       0,                         // nEscapement 
       0,                         // nOrientation 
       FW_BOLD,                 // nWeight 
       FALSE,                     // bItalic 
       FALSE,                     // bUnderline 
       0,                         // cStrikeOut 
       ANSI_CHARSET,              // nCharSet 
       OUT_DEFAULT_PRECIS,        // nOutPrecision 
       CLIP_DEFAULT_PRECIS,       // nClipPrecision 
       DEFAULT_QUALITY,           // nQuality 
       DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily 
       "Times New Roman"));       // lpszFacename 
    
        m_MemberVonEinemEdit.SetFont(&fSchriftTyp1); // <--- Schriftart 1 
    
        m_MemberVonEinemStatic.SetFont(&fSchriftTyp2); // <--- Schriftart 2
        // Add "About..." menu item to system menu.
    ....
       return TRUE;
    

    Du machst ja hiermit font.CreateFont(...) einen Funktionsaufruf den solltest du dann auch in der Funktion machen. Sollte jetzt funzen.

    *winke*
    Hellsgore



  • --------------------Configuration: test - Win32 Debug--------------------
    Build : warning : failed to (or don't know how to) build 'C:\Dokumente und Einstellungen\Administrator\Desktop\button\RolloverButton.cpp'
    Compiling...
    testDlg.cpp
    G:\Stephan\Programme\test\testDlg.cpp(127) : error C2065: 'font' : undeclared identifier
    G:\Stephan\Programme\test\testDlg.cpp(127) : error C2228: left of '.CreateFontA' must have class/struct/union type
    G:\Stephan\Programme\test\testDlg.cpp(144) : error C2228: left of '.CreateFontA' must have class/struct/union type
    G:\Stephan\Programme\test\testDlg.cpp(148) : error C2065: 'm_MemberVonEinemEdit' : undeclared identifier
    G:\Stephan\Programme\test\testDlg.cpp(148) : error C2228: left of '.SetFont' must have class/struct/union type
    G:\Stephan\Programme\test\testDlg.cpp(150) : error C2065: 'm_MemberVonEinemStatic' : undeclared identifier
    G:\Stephan\Programme\test\testDlg.cpp(150) : error C2228: left of '.SetFont' must have class/struct/union type
    Error executing cl.exe.
    
    test.exe - 7 error(s), 1 warning(s)
    

    😞



  • Servus,

    Sei mir nicht böse aber ich würde dir erstmal ein schönes Tut für MFC C++ empfehlen damit du ein bisschen MFC C++ kennenlernst. Methoden, Funktionen, Vererbung etc.

    Wenn du über den Code drüber guckst dann siehst du das CFont fSchriftTyp1; deklariert wurde. Daraus lässt sich dann schließen das es font.CreateFont(); es ja garnicht gibt sondern fSchriftTyp1.CreateFont() heißen müsste.

    Das war von mir nur ein Bsp. und sollte nur als Anschauungsmaterial dienen. Wie rufst du denn Mehoden / Funktionen von einem Button auf?

    Natürlich so:
    CButton clButtonTest;
    clButtonTest.IrgendNeFunc();

    *winke*
    Hellsgore



  • oki sry, jetzt hab ich alles, nur noch ne frage:

    --------------------Configuration: test - Win32 Debug--------------------
    Build : warning : failed to (or don't know how to) build 'C:\Dokumente und Einstellungen\Administrator\Desktop\button\RolloverButton.cpp'
    Compiling...
    testDlg.cpp
    G:\Stephan\Programme\test\testDlg.cpp(152) : error C2039: 'SetFont' : is not a member of 'CString'
    c:\programme\microsoft visual studio\vc98\mfc\include\afx.h(368) : see declaration of 'CString'
    G:\Stephan\Programme\test\testDlg.cpp(154) : error C2039: 'SetFont' : is not a member of 'CString'
    c:\programme\microsoft visual studio\vc98\mfc\include\afx.h(368) : see declaration of 'CString'

    Warum das? Wie kann ich das wegmachen, SetFont müsste es doch sein, oder?

    Danke schonmal

    Stephan



  • SetFont ist ja schon richtig aber ist leider kein Member von CString.

    MSDN -> CStringT (Bei VS 7)
    MSDN -> CString (Bei VS 6)

    Du versuchst eine Funktion von einer Variable vom Typ CString aufzurufen. In der Klasse CString gibt es aber kein SetFont.

    z.B. in der Klasse CButton, CStatic etc. gibt es SetFont();

    Du darfst nicht der Variable in der du deinen Text drinstehen hast mit SetFont verändern, sondern das Control in das du es hinein schreibst. Ist auch ein bissle verwirrend *g*...

    *winke*
    Hellsgore


Anmelden zum Antworten