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*
HellsgoreEDIT:
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