Screen size in inches on Windows

api, graphics, screen, winapi, windows

Solution

For Windows, first see `SetProcessDPIAware()` for a discussion on turning off automatic scaling, and then call `GetDeviceCaps( LOGPIXELSX )` and `GetDeviceCaps( LOGPIXELSY )` on your HDC to determine the monitor's DPI. Divide the screen resolution on your active monitor by those settings and you've got the size.

Also see this article for a similar discussion on DPI aware apps.

Problem

I am developing a multi-platform game that runs on iOS as well as desktops (Windows, Mac, Linux). I want the game to be able to resize certain UI elements depending on the resolution of the screen in inches. The idea is that if a button should be, say, around 1/2 inch across in any interface, it will be scaled automatically that size. Now for iOS devices this problem is reasonably well solvable using brute force techniques. You can look up the type of the device and use a hard-coded table to determine the screen size in inches for each device. Not the most elegant solution, but sufficient. Desktops are the tricky ones. What I wish and hope exists is a mechanism by which (some?) monitors report to operating systems their actual screen size in inches. If that mechanism exists and I can access it somehow, I can get good numbers at least for some monitors. But I've never come across any such concept in any of the major OS APIs. Is there a way to ask for the screen size in inches in Win32? If so, are there monitors that actually provide this information? (And if the answer is no: Gosh, doesn't this seem awfully useful?)

Original source

Related problems