Re: [Q]How to display Tahoma italic font



"Johnny" <johnny194@xxxxxxxxxxx> wrote in message
news:1147831149.757831.274410@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

I can get the proper display using Arial or Times New Roman. Why you
can't? BTW. I used win32 application project instead of MFC project, is
that the matter?

I suspect it is an issue of different screen resolutions or font size.

2. Instead of substracting the cWidth from the Xincrement, if I add
the cWidth, it will ok,

For what font?

but for other TT fonts, there are additional
spaces on the canvas. And I can't find anything to support adding the
cWidth, most of them suggest substracting like yours.

The C width for d is going to be negative with any italic font, so adding
it
means that you shift the following text to the left, which will worsen
any
overlap.
Adding is will shift the following text to the left? er, i mean, add
the cWidth to the XIncrement

On my computer, the C widths for italic 'd' for selected fonts are as
follows:

Arial -1
Times New Roman -1
Tahoma -4
Impact -4

Thus adding any of these to XIncrement reduces XIncrement, so that the final
normal text begins further to the left. On the other hand, subtracting them
shifts the text to the right.

Besids John, this is the updated code according to your advice, I'm not
sure whether we two have the same codes running...

Yes, running the following code (with optional insertion of an adjustment
for the C width) gives the results I have been talking about.

typedef enum _FontType{
ITALIC_FONT = 1,
BOLD_FONT = 2,
NORMAL_FONT = 3,
}FontType;

HFONT MyCreateFont(FontType ftype)
{
LOGFONTW logfont = {0};

wcscpy(logfont.lfFaceName, L"Arial");
switch (ftype)
{
case ITALIC_FONT:
logfont.lfItalic = TRUE;
break;
case BOLD_FONT:
logfont.lfWeight = FW_BOLD;
break;
case NORMAL_FONT:
break;
default:
assert(0);
break;
}

return CreateFontIndirectW(&logfont);
}

void demoFunc(HDC hdc)
{
int XIncrement;
int YStart;

HFONT hfntDefault;
HFONT hfntItalic;
HFONT hfntNormal;

LPWSTR wString = L"dd";
int stringLen = wcslen(wString);
SIZE sz;

// Create a normal and an italic logical font
hfntItalic = MyCreateFont(ITALIC_FONT);
hfntNormal = MyCreateFont(NORMAL_FONT);

// Select the normal font and draw the first string
// beginning at the specified point (XIncrement, YStart).
XIncrement = 10;
YStart = 50;

hfntDefault = (HFONT)SelectObject(hdc, hfntNormal);
TextOutW(hdc, XIncrement, YStart, (LPCWSTR)wString, stringLen);

GetTextExtentPoint32W(hdc, (LPCWSTR)wString, stringLen, &sz);
XIncrement += sz.cx;

// Select an italic font and draw the second string
// beginning at the point (XIncrement, YStart).
hfntNormal = (HFONT)SelectObject(hdc, hfntItalic);
TextOutW(hdc, XIncrement, YStart, (LPCWSTR)wString, stringLen);

// Compute the length of the second string and add
// this value to the x-increment that is used for the
// text-output operation.
GetTextExtentPoint32W(hdc, (LPCWSTR)wString, stringLen, &sz);
XIncrement += sz.cx;

// Reselect the normal font and draw the third string
// beginning at the point (XIncrement, YStart).
SelectObject(hdc, hfntNormal);
TextOutW(hdc, XIncrement, YStart, (LPCWSTR)wString, stringLen);

// Reselect the original font.
SelectObject(hdc, hfntDefault);

// Delete the bold and italic fonts.
DeleteObject(hfntItalic);
DeleteObject(hfntNormal);
}

Regards,
Johnny



--
John Carson


.



Relevant Pages

  • Re: [Q]How to display Tahoma italic font
    ... I can't display Tahoma font in italic properly using ... string and incrementing XIncrement, you should do a second increment as ... character of the non-italic string that follows). ... // beginning at the specified point (XIncrement, YStart). ...
    (microsoft.public.win32.programmer.gdi)
  • Re: [Q]How to display Tahoma italic font
    ... I suspect it is an issue of different screen resolutions or font size. ... Thus adding any of these to XIncrement reduces XIncrement, ... // Select the normal font and draw the first string ... // beginning at the specified point (XIncrement, YStart). ...
    (microsoft.public.win32.programmer.gdi)
  • [Q]How to display Tahoma italic font
    ... I can't display Tahoma font in italic properly using ... // translate the LPSTR string to LPWSTR string ... // beginning at the specified point (XIncrement, YStart). ...
    (microsoft.public.win32.programmer.gdi)
  • Re: How to get the correct width of italic font?
    ... line, but as you can run and see, the italic font ... // translate the LPSTR string to LPWSTR string ... // beginning at the specified point (XIncrement, YStart). ...
    (microsoft.public.win32.programmer.gdi)
  • Re: [Q]How to display Tahoma italic font
    ... right hand normal letters overlap the last italic letter. ... other fonts, here i mean any font i've tried. ... space you need for the string. ... // beginning at the specified point (XIncrement, ...
    (microsoft.public.win32.programmer.gdi)