Re: What is the correct way to response to the wxEVT_DPI_CHANGED event?
Maarten Bent <[email protected]>
| Newsgroups | gmane.comp.lib.wxwindows.general |
|---|---|
| Message-ID | <[email protected]> |
Hi,
In most cases you shouldn't have to do anything. The scaling is done
internally.
If your own code has stuff that depend on the DPI, you can handle the
event and update things accordingly.
FromDIP converts a device-independent size to the size applicable for
the display.
So if your display has scaling 100% it converts 250x50 to 250x50
physical pixels
If your display has 200% scaling, it converts 250x50 to 500x100 physical
pixels.
This ensures that it will look the same on both displays.
In your example on the forum you use the static wxWindow::FromDIP()
function. This is incorrect. It will always use the DPI of the main
window when creating the control.
This is why you see the wrong button size when you reset the resolution
and the button is recreated.
You should use member function FromDIP() (without wxWindow::), so it
will use the DPI of the display that the window is shown on.
wxDisplay::OnResetMode is definitely not needed for DPI changes.
Maarten
On 30-3-2023 07:52, AsmWarrior wrote:
> Hi, when the application receive a wxEVT_DPI_CHANGED event, how can it
> response to the event?
>
> I looked at the wxWidgets' sample code "display", it looks like it
> does nothing, but just show some text in the status bar:
>
> void MyFrame::OnDPIChanged(wxDPIChangedEvent& event)
> {
> wxLogStatus(this, "DPI changed: was %d*%d, now %d*%d",
> event.GetOldDPI().x, event.GetOldDPI().y,
> event.GetNewDPI().x, event.GetNewDPI().y);
>
> event.Skip();
> }
>
> But if we need to layout the UIs, do we need to call the ResetMode()
> function of the wxDisplay class?
>
> I just search for the "ResetMode" in wxWidgets' github site, I don't
> see much usage of this function.
>
> In the "display" sample code, this function is called when a wxButton
> get clicked.
>
> I even did some test about the DPI changing, and I think if
> ResetMode() is not called, the layout is wrong, you can see the
> discussion and image shots here in the:
>
> How does the FromDIP function work under different DPI scaling? —
> https://forums.wxwidgets.org/viewtopic.php?p=218156#p218156
>
> Any suggestions? Thanks!
>
> Asmwarrior
> --
> Please read https://www.wxwidgets.org/support/mlhowto.htm before posting.
> ---
> You received this message because you are subscribed to the Google
> Groups "wx-users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/wx-users/af6073ad-2ba0-43f8-94d2-d2c156fa6bcfn%40googlegroups.com
> <https://groups.google.com/d/msgid/wx-users/af6073ad-2ba0-43f8-94d2-d2c156fa6bcfn%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
Please read https://www.wxwidgets.org/support/mlhowto.htm before posting.
---
You received this message because you are subscribed to the Google Groups "wx-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/wx-users/b0bcae58-5b91-30a6-9ccb-e7a94d320a02%40gmail.com.