在VB表单中,我放置控件(图像控件),例如横幅图像、图像中的徽标以及动画圆圈的图像列表来表示处理。
当我将这些控件设置为 96 dpi 时,它们是完美的。但一旦 dpi 设置更改为 120dpi,控件就会调整大小并重新定位。
如何在不同的 dpi 设置下保持相同的控件位置?
ActiveResize 是一个自动调整控件大小的好工具。虽然要花钱,但绝对值得一看。
您可以通过组合清单文件和一些用于调整大小的代码来处理 VB6 中的 DPI 缩放问题。
为您的应用程序创建一个清单文件(例如,
YourApp.exe.manifest
),其中包含以下内容:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<application>
<windowsSettings>
<dpiAware>true</dpiAware>
</windowsSettings>
</application>
</assembly>
这会告诉 Windows 您的应用程序可识别 DPI,从而防止出现自动缩放问题。
VB6 本身不处理缩放,因此您需要自己调整控件。在您的
Form_Load
中使用此代码:
Private Sub Form_Load()
Dim dpiX As Long, scaleFactor As Double
dpiX = GetDeviceCaps(GetDC(0), 88) ' LOGPIXELSX
scaleFactor = dpiX / 96 ' Assuming 96 DPI as the baseline
Dim ctrl As Control
For Each ctrl In Me.Controls
With ctrl
.Left = .Left * scaleFactor
.Top = .Top * scaleFactor
.Width = .Width * scaleFactor
.Height = .Height * scaleFactor
End With
Next
End Sub
这会根据当前 DPI 缩放控件。
这应该可以解决问题