SystemParameters.SmallIconWidth 在任何 dpi 上返回 16,那么如何检查实际的最佳图标大小?
Posted
技术标签:
【中文标题】SystemParameters.SmallIconWidth 在任何 dpi 上返回 16,那么如何检查实际的最佳图标大小?【英文标题】:SystemParameters.SmallIconWidth returns 16 on any dpi, so how can I check for actual best icon size? 【发布时间】:2021-09-21 22:45:36 【问题描述】:我认为SystemParameters.SmallIconWidth 会告诉我小图标的最佳尺寸是多少。但是,即使我在 Settings->Display 中将 dpi 更改为 150%,SystemParameters.SmallIconWidth
的值仍然保持不变。
有没有办法检查最佳图标大小?
(为什么我认为它应该由 dpi 更改 - this answer 和 this one 由具有超过 500k 代表的用户更改。)
【问题讨论】:
您确定您的 DPI 更改已在您的应用中生效吗?你重启了吗? @PmDuda 是的。我什至清理了解决方案并重新构建以确保。 【参考方案1】:即使您在应用程序清单中和/或在运行时声明完全 DPI 感知,某些 Windows 函数也会出于某种原因返回 96 DPI(或系统 DPI)值。你必须 pinvoke 新的 API:
public enum SystemMetric:int SM_CXSMICON = 49
[DllImport("user32.dll")]
static extern int GetSystemMetricsForDpi(SystemMetric smIndex, uint dpi);
[DllImport("user32.dll")]
static extern uint GetDpiForWindow(IntPtr hwnd);
HwndSource source = (HwndSource)HwndSource.FromVisual(this);
IntPtr hWnd = source.Handle;
uint dpi = GetDpiForWindow(hWnd);
int width = GetSystemMetricsForDpi(SM_CXSMICON, dpi);
这些功能仅存在于 Windows 10 更新 1607 及更高版本中。如果您需要支持旧版本,您必须自己手动调整不正确的 DPI 值 (x = x * dpi / 96
),而不是调用这些函数。
另见:
Developing a Per-Monitor DPI-Aware WPF Application【讨论】:
以上是关于SystemParameters.SmallIconWidth 在任何 dpi 上返回 16,那么如何检查实际的最佳图标大小?的主要内容,如果未能解决你的问题,请参考以下文章