chrischavez
2019-06-23 02:10:28 UTC
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
https://www.perlmonks.org/?node_id=11101747
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-setprocessdpiaware
my $SetProcessDPIAware = 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.
This approach works in Perl/Tk as well as modern Tcl/Tk wrappers like Tcl::pTk. Note that although $widget->scaling will be updated correctly, certain elements like images will not be resized automatically and may appear smaller than expected.
Christopher A. Chavez
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
https://www.perlmonks.org/?node_id=11101747
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-setprocessdpiaware
my $SetProcessDPIAware = 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.
This approach works in Perl/Tk as well as modern Tcl/Tk wrappers like Tcl::pTk. Note that although $widget->scaling will be updated correctly, certain elements like images will not be resized automatically and may appear smaller than expected.
Christopher A. Chavez