• 0

DrawText API and Font Sizes


Question

Ok. So I've managed to cobble together a ENUMLOGFONTEXDV, with a ENUMLOGFONTEX inside, which contains a LOGFONT with a Height of, say, 24. I then use SelectObject() to select the handle to that ENUMLOGFONTEXDV in my Graphics object, and use DrawText() to draw it. The unfortunate thing is that that 24 for, whatever reason, is in Pixels, and not in the format the is used for determining font sizes.

If i call Veranda and Georgia like this, they come out to the same size, when in Word, size 24 Veranda is larger than size 24 Georgia.

How do I calculate what values I should be using?

Link to comment
https://www.neowin.net/forum/topic/443480-drawtext-api-and-font-sizes/
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Yeah, I realize that now. I picked another font pair, with a vast obvious difference, and have the same problem.

If I call this with 50 for FontSize, I get 67, which I use for my LOGFONT's lfHeight.

MulDiv(FontSize, GetDeviceCaps(ptr1, 90), 72)

These are the two fonts I'm using,post-47827-1142631655_thumb.jpg

and my results.post-47827-1142631662.jpg

  • 0

Yeah, that's a problem. lol! But you already knew that. Would you mind posting your code?

Actually, I think I have an idea. Is the rectangle you specify for DrawText the same for both? Regardless of the font size, when GDI paints, it will paint within the rect you give it.

  • 0

Ok. Maybe I'm just getting my rectangle the wrong way.

			IntPtr ptr1 = graphics.GetHdc();
			SelectObject(ptr1, HandleToENUMLOGFONTEXDV);
			RECT r = new RECT();
			DrawText(ptr1, "Test1", 4, ref r, DT_CALCRECT | DT_LEFT | DT_SINGLELINE);

Shouldn't r now be the RECT I want to call DrawText again (but without DR_CALCRECT) with?

  • 0

Hmmmm... Sorry, I'm a bit rusty with Win32. I hadn't noticed the DT_CALCRECT flag.

I believe your assertion is correct. If the rect needs resizing in any case, it won't draw the text but it will resize the rect. Give it a whirl. I don't have a sandbox to play in and doing all the imports for C# would take some time.

  • 0
  Dayon said:

....Any more ideas?

Use GDI+?

			using (Graphics g = Graphics.FromHwnd(this.Handle))
			{
				using (Font f1 = new Font("Blue Highway", 24f))
				{
					g.DrawString("Test!", f1, Brushes.Black, new PointF(25f, 25f));
				}

				using(Font f2 = new Font("Cargo Two SF", 24f))
				{
					g.DrawString("Test!", f2, Brushes.Black, new PointF(150f, 25f));
				}
			}

That drew the attachment:

  • 0
  weenur said:

:pinch: wth? lol that's a wierd side effect.

Yeah, you threw a '-' in front of the MulDiv. I dropped it. (Stupid me.)

I found this on MSDN:

  Quote
lfHeight

Specifies the height, in logical units, of the font's character cell or character. The character height value (also known as the em height) is the character cell height value minus the internal-leading value. The font mapper interprets the value specified in lfHeight in the following manner.

Value Meaning

> 0 The font mapper transforms this value into device units and matches it against the cell height of the available fonts.

0 The font mapper uses a default height value when it searches for a match.

< 0 The font mapper transforms this value into device units and matches its absolute value against the character height of the available fonts.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • I happen to try it today not knowing about the update and was happily surprised; it is great.
    • Hello, Hardware Support Applications are a special kind of Microsoft Store app and have to go through additional checks and certifications because they can communicate directly with their driver, which means that a vulnerability in one of them could allow an attacker access to kernel space memory through the HSA ←→ device driver interface.  In other words, a BYOVD (bring your won vulnerable driver) attack, but with the HSA being used as an extra step. Remember, the Microsoft Store is strategic to Microsoft's long-term goals: they see it as the means to get the same 30% of every application sale that Apple and Google get through their stores, which is why it has been a fixture of Windows since Windows 8 was introduced in 2012 despite a low adoption rate.  Microsoft cannot afford to have anyone get an app through their store which causes a security issue for their end users.  Even if the app was written by and uploaded to the Microsoft Store by a partner, it is Microsoft's name on the store, and they are the ones that will have reputational/brand damage if they allow something malicious into their store. Regards, Aryeh Goretsky  
    • This is more from my childhood, when nickelodeon just launched and had to license shows to have something to air. Left a big an impact, but probably more emotion positive / childhood thing. Europe got the follow up season's decade's latter with the animation studio that did Air Bender but never licenses for the US. I miss the day's of longer intro's. Nier (PS3) Intro is epic, and was very unexpected.  PS1 Xengears was also epic and an amazing game.  
    • Sayan Sen, do you think one day an image of the Windows Vista desktop or the wallpaper could be used in the primary image of an article? (When I think of CDs and DVDs I think of that release of Windows and of earlier releases; it is the one that debuted IMAPI 2.0 and other features.)
    • Big fan of EAC Here's a good non-default naming scheme I found on the web (can't take credit) File Name Scheme - %albumartist%\%year% - %albumtitle%\%tracknr2% %title% Various Artists Naming Scheme - Various Artists\%year% - %albumtitle%\%tracknr2% %title% Also, I need test but there is a new flac.exe binary & dll you can drop in the folder to upgrade flac support. I did this pre EAC 1.8. EAC 1.8 did upgrade it to 1.4.3. Flac 1.5.0 came out this year. https://ftp.osuosl.org/pub/xiph/releases/flac/ I don't know how much of a difference / impact will make.
  • Recent Achievements

    • Week One Done
      Ricky Chan earned a badge
      Week One Done
    • Week One Done
      maimutza earned a badge
      Week One Done
    • Week One Done
      abortretryfail earned a badge
      Week One Done
    • First Post
      Mr bot earned a badge
      First Post
    • First Post
      Bkl211 earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      484
    2. 2
      +FloatingFatMan
      263
    3. 3
      snowy owl
      240
    4. 4
      ATLien_0
      227
    5. 5
      Edouard
      188
  • Tell a friend

    Love Neowin? Tell a friend!