Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Visual in 21 tagen / Tag 7

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.10.2003, 14:13 Uhr
~Jogi76
Gast


---------------------------
Hallo Leute,

ich bin grad dabei VC in 21 Tagen durchzuarbeiten. Im Kapitel 7 (Schriften) komme ich aber grad echt net weiter. Und zwar bei der ersten Übungsaufgabe
des Kapitels. Man soll dort:

Frage:
Der Funktion CreateFont muß man eine Vielzahl von Argumenten übergeben.
Kann man auch auf eine alternative Funktion zurückgreifen?

Antwort:
Eine derartige Funktion gibt es, obwohl man trotzdem noch alle Informationen
festlegt. Die Struktur LOGFONT enthält die gleichen Attribute, die man
an die Funktion CreateFont übergibt. Man kann eine Instanz dieser Struktur
deklarieren, die Attribute mit Standardwerten initialisieren und dann diese
Struktur an die Funktion CreateFontIndirect übergeben. Wenn umfangreiche
Schriftänderungen vorzunehmen sind, ist diese Methode zu bevorzugen, weil
man dieselbe Instanz der Struktur verwenden kann und nur diejenigen Attribute
modifiziert, die sich gegenüber den aktuellen Einstellungen geändert haben.
Damit erstellt man dann die verschiedenartigen Schriften.
Um diese alternative Lösung zum Erzeugen einer Schrift zu verwenden, deklariert
man eine Instanz der Struktur LOGFONT als Element der Dialogfeldklasse und initialisiert
dann alle Attribute, bevor man die Funktion SetMyFont aufruft. In der Funktion
SetMyFont nehmen Sie die Modifikationen gemäß Listing 7.10 vor.
Listing 7.10: Die modifizierte Funktion SetMyFont

C++:
void CTag7Dlg::SetMyFont()
{
  // Wurde eine Schrift ausgewählt?
  if (m_strFontName != "")
  {
     // Annahme, daß Schriftgröße bereits in Struktur
     // m_lLogFont initialisiert wurde. Damit ist nur
     // noch der Schriftname zu spezifizieren.
    _ tcscpy(m_lLogFont.lfFaceName, m_strFontName);
    // Zu verwendende Schrift erzeugen
    m_fSampFont.CreateFontIndirect(&m_lLogFont);

    // Schrift für Anzeigefeld der Schriftprobe festlegen
   m_ctlDisplayText.SetFont(&m_fSampFont);
   }
}


ok, soweit is das ja auch klar. Die Instanz habe ich wiefolgt initialisiert:

C++:
void CTag7Dlg::OnSelchangeLfonts()
{
  // Variablen mit Steuerelementen des Dialogfelds aktualisieren
  UpdateData(TRUE);

  CRect rRect; // Rechteck des Anzeigebereichs
  int iHeight; // Höhe des Anzeigebereichs  
  // Abmessungen des Feldes für Schriftbeispiel ermitteln
  m_ctlDisplayText.GetWindowRect(&rRect);
  // Höhe des Feldes berechnen
  iHeight = rRect.top - rRect.bottom;
  // Sicherstellen, daß Höhe positiv
  if (iHeight < 0)
    iHeight = 0 - iHeight;

  if (m_strFontName != "")
  {
    m_lLogFont.lfHeight          = iHeight - 5;
    m_lLogFont.lfWidth           = 0;
    m_lLogFont.lfEscapement    = 0;
    m_lLogFont.lfOrientation     = 0;
    m_lLogFont.lfWeight          = FW_NORMAL;
    m_lLogFont.lfItalic            = 0;
    m_lLogFont.lfUnderline       = 0;
    m_lLogFont.lfStrikeOut       = 0;
    m_lLogFont.lfCharSet         = DEFAULT_CHARSET;
    m_lLogFont.lfOutPrecision   = OUT_CHARACTER_PRECIS;
    m_lLogFont.lfClipPrecision   = CLIP_CHARACTER_PRECIS;
    m_lLogFont.lfQuality            = DEFAULT_QUALITY;
    m_lLogFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
  }
  // Schrift für Beispiel festlegen  
  SetMyFont();
}


doch das ganze Funzt nur 1 mal und es kommt diese Fehlermeldung:

Code:
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!

Program: F:\T1H2\C++\VC_21Tage\Tag7\Debug\Tag7.exe
File: wingdi.cpp
Line: 1120

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
---------------------------
Abbrechen   Wiederholen   Ignorieren  
---------------------------


was ich nun sehr komisch finde ist das wenn ich "Ignorieren" drücke,
geht alles wie gewollt !???
Ich hab keinen Plan was mir diese Fehlermeldung sagen will und wie ich denn Fehler suchen soll. Die Datei "File: wingdi.cpp" gibt es auch garnicht in dem Projekt.

Ihr könnt mir da doch bestimmt weiterhelfen.

Danke Jogi

--edit 0xdeadbeef: cpp-Tags eingefügt. Machs nächstes mal bitte selbst.

Dieser Post wurde am 25.10.2003 um 15:35 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.10.2003, 14:32 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ohne Überprüfung: Du gibst den aktuellen Font nicht mit Detach() frei.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.10.2003, 15:10 Uhr
~Jogi76
Gast


Hey, jo jetzt geht´s !!!

Danke Uwe

Gruss Jogi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: