• 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

    • Can't they just allow people to hide the status bar (battery etc.) when Safari is open and to hide the bottom bar completely when scrolling for a true full-screen experience ? Samsung does that on its Samsung Internet Browser and it's a very good experience.
    • Trend Micro Cleaner One Pro 6.8.0.333 by Razvan Serea Trend Micro Cleaner One Pro is an all-in-one disk cleaning and optimization software. Free up disk space by removing bloatware and junk files, and solve small issues before they become big problems. Cleaner One Pro scans your disks quickly and then displays the garbage files so you can decide which of them you want to be removed. Cleaner One Pro also provides some advanced features including start up manager, application manager and registry cleaner. Keep your PC clean and automatically tune it up for the best performance. Cleaner One Pro key features: Junk File Cleaner Quick scan to remove temporary files Erase leftover hidden files from deleted Apps Clear trash on external drives Large File Scanner Find large files on your disk and free up more storage Filter and manage files by size (from 10MB+), date, name and type Avoid accidental deletions: Lock to protect important large files. No escape for local files synced from Cloud drives Disk Map Analyze your storage in a visual and interactive map. Color-coded breakdown of every folder on your disk, with detailed information at one click. Easier to manually navigate and manage folders/files by size. Duplicate Files Customizable folder search range. Find and filter unused file copies in just a few seconds. Similar Photos Tidy up your albums and remove duplicate photos the easy way. Registry Cleaner Scan Windows Registry Automatically Finds errors & residual items in the registry and then cleans or defrags them Start up Manager Control, configure and review the programs and services that start with Windows Speed up boot time easily. App Manager Uninstall third-party apps and associated files in a breeze. View and manage Apps by name, size or date. Batch remove multiple unused Apps. Note: Cleaner One Pro 6.8.0.333 changelog is not yet available. Download: Cleaner One Pro 6.8.0.333 | 66.1 MB (Freeware, paid upgrade available) View: Home Page | Cleaner One Pro for Mac OS | Windows Store | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • A friend of mine got this icon being displayed on his iPhone 8 [he's currently in Paris, France - so it might be a local/country icon?!] Do you guys & gals know what this means? I looked on Apple's site, but this icon isn't listed: https://support.apple.com/guide/iphone/learn-the-meaning-of-the-status-icons-iphef7bb57dc/ios
    • Trump is a willing victim.
  • Recent Achievements

    • One Month Later
      serfegyed earned a badge
      One Month Later
    • Dedicated
      firey earned a badge
      Dedicated
    • Dedicated
      fettermanj earned a badge
      Dedicated
    • One Month Later
      SekTheFirst earned a badge
      One Month Later
    • First Post
      zayanhani earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      638
    2. 2
      ATLien_0
      231
    3. 3
      Michael Scrip
      219
    4. 4
      Xenon
      145
    5. 5
      Steven P.
      141
  • Tell a friend

    Love Neowin? Tell a friend!