windows - Problem med TEXTMETRIC struct og 'Cambria Math' skrifttypen

Indlæg af Hanne Mølgaard Plasc

Problem



Hvis jeg kører koden nedenfor, får jeg følgende værdier for tm og gm strukturerne med 'cambria Math' skrifttypen:


tm.tmHeight = 161
tm.tmAscent = 90
tm.tmDescent = 71


og


gm.gmBlackBoxY = 14


Værdierne i tm er klart i fejl ! gmBlackBoxY synes at være korrekt.


Nu, hvis jeg kører koden med


lfFaceName = "Arial"


Jeg får for tm og gm følgende værdier, som er korrekte:


tm.tmHeight = 33
tm.tmAscent = 27
tm.tmDescent = 6


og


gm.gmBlackBoxY = 15


Kode:


int iLogPixelsY;
iLogPixelsY = GetDeviceCaps(hdc,LOGPIXELSY);

LOGFONT lf;
int iPts;
iPts = 22;

memset(&lf, 0, sizeof(LOGFONT));

lf.lfHeight = -iPts * iLogPixelsY / 72;
lf.lfWeight = FW\_NORMAL;
lf.lfItalic = 0;
lf.lfCharSet = 0;
lf.lfOutPrecision = OUT\_TT\_ONLY\_PRECIS;

wcscpy(lf.lfFaceName, L"Cambria Math");
HFONT hFont;
hFont = CreateFontIndirect(&lf);
hFont = (HFONT)SelectObject(hdc, hFont);

TCHAR tx;
tx = 'a';

TEXTMETRIC tm;
GetTextMetrics(hdc, &tm);

GLYPHMETRICS gm;
GetGlyphOutline(hdc, tx, GGO\_METRICS, &gm, 0, NULL, &gmat);


Kan nogen forklare den tilsyneladende forkerthed ved at opnå strukturen TEXTMETRIC til en 'Cambria Math' skrifttype?

Bedste reference


Fejl i din kode gælder ikke for at opnå TEXTMETRIC struktur (med undtagelse af, at du bruger TCHARs, CHARs og WCHARs funktioner og variabler i samme kode).


tm.tmHeight == 161;
tm.tmAscent == 90;
tm.tmDescent == 71;
tm.tmInternalLeading == 132;


Ovenstående linjer har ingen fejl !!!


tm.tmHeight == tm.tmAscent + tm.tmDescent;
tm.tmHeight == tm.tmInternalLeading + MulDiv(22,GetDeviceCaps(hdc,LOGPIXELSY),72);


'Cambria Math' er designet med disse parametre!


Gå til linket http://www.ascenderfonts.com/font/cambria-regular.aspx Skift skriftstørrelsen til 22pt (eller hvad som helst) og se på forskellen mellem top- og bundmargener for skrifttypen 'Cambria' og skrifttype 'Cambria Math'. [14]