ppescher / resizablelib

A set of MFC classes to easily make resizable windows
Other
54 stars 27 forks source link

HighDPI problem: size of controls do not resize correctly when ... #14

Open 0ric1 opened 4 years ago

0ric1 commented 4 years ago

moving the dialog (resizablelib\ResizableDialog) demo application (e.g. dialog New features or Test Dialog) from a monitor (main) with 150% scaling to a monitor (secondary) with 100% scaling and the demo application has "Per Monitor High DPI Aware V2" enabled. The application is started from 150% monitor.

ppescher commented 4 years ago

Could you please post a picture showing this issue?

0ric1 commented 4 years ago

100% Monitor:

20190822_Resizable_HighDPI_Problem2

150% Monitor:

20190822_Resizable_HighDPI_Problem3

The buttons are very tall, not visible in the small preview.

ppescher commented 4 years ago

Ok I can see what happens... the dialog controls keep their size in pixels when moving from the 150% monitor to the 100% monitor, while the dialog window itself is shrinked. Do they stay that size even if you resize the parent window?

0ric1 commented 4 years ago

I shot a hand photo it's more obvious: Unbenannt

0ric1 commented 4 years ago

Yes, when resized the buttons keep the same size.

ppescher commented 4 years ago

Obviously the library does not cope with different DPI settings. I am not sure if there could be a simple fix, like working with "logical" vs "physical" pixels and just call unit conversion functions over window coordinates/size.

0ric1 commented 4 years ago

There are new functions like GetDpiForWindow, GetDpiForSystem, AdjustWindowRectExForDpi, GetDialogControlDpiChangeBehavior, GetDpiFromDpiAwarenessContext, LogicalToPhysicalPointForPerMonitorDPI, PhysicalToLogicalPointForPerMonitorDPI a.s.o. as described here: https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows

ppescher commented 4 years ago

It might be possible to support the new API, but I don't have Windows 10 on my main dev PC, so don't expect this change to come any time soon. :-(

irwir commented 4 years ago

According to docs, MFC supports only DPI System-awareness level.