High DPI on Windows with Tk

[email protected] (Christopher Chavez) Sat, 22 Jun 2019 21:05:37 -0500
Newsgroups perl.tcltk
Message-ID <[email protected]>
Hi everyone,

I wanted to share a way for using high-DPI appearance on Windows that I =
found, in case anyone was interested. I have posted it to=20
https://www.perlmonks.org/?node_id=3D11101747


Before calling MainWindow->new in Tk, use Win32::API to invoke =
SetProcessDPIAware():

if ($^O eq 'MSWin32') {
   use Win32::API;
   # See =
https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-se=
tprocessdpiaware
   my $SetProcessDPIAware =3D Win32::API::More->new('User32', 'BOOL =
SetProcessDPIAware()');
   $SetProcessDPIAware->Call() or warn 'Failed to set process DPI =
awareness';
}


This isn't the approach Microsoft recommends (they suggest using an =
application manifest instead), but this seems to be an easy enough =
approach for standalone scripts.


Recent Tcl/Tk will enable high-DPI by default for scripts run using =
tclsh/wish, but not the Tcl C API. I'm not sure this behavior should be =
the default in Tcl::pTk, for compatibility (i.e. since Perl/Tk does not =
enable high-DPI) and because certain elements like images will not be =
resized automatically.

Maybe Tcl::Tk would be more in favor of having this behavior by default =
(for consistency with Tcl/Tk), but it might require XS or dependency on =
another module like Win32::API.


Christopher A. Chavez