我正在使用不支持 DPI 的按钮。我在我的代码中到处都在使用它,所以理想情况下我想在该按钮的 SetIcon 中添加几行。
SetIcon 方法(不出所料)将 HICON 作为参数 - 我想根据 DPI 分辨率更改图标(因此大多数时候会增加其大小)。
编辑 如下所述,我的问题不清楚。我不想更改图标的大小 - 正如从资源中读取的那样 - 但我想将 HICON od 16x16 转换为 40x40 的新 HICON。我有一些读取 PNG(返回 HICON)的代码,而 LoadImage(也不是 LoadIconWithScaleDown)无法使用它。
有什么想法吗?
最佳答案
使用LoadIconWithScaleDown()
(自 Windows Vista 起可用)加载所需大小的图标图像,该图像已按 DPI 比例因子缩放。
另一个答案建议使用 LoadImage()
,但是 LoadIconWithScaleDown()
将大大提高图像质量图标资源。在这种情况下,LoadImage()
加载具有下一个较小 尺寸的图像并按比例放大,而 LoadIconWithScaleDown()
加载下一个 >更大图像并将其缩小,这使得缩放后的图像看起来更详细、更清晰。
int cx = GetSystemMetrics( SM_CXSMICON ); // scaled for system DPI!
int cy = GetSystemMetrics( SM_CYSMICON ); // scaled for system DPI!
HICON hIcon = NULL;
HRESULT hr = LoadIconWithScaleDown( AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1),
cx, cy, &hIcon );
if( SUCCEEDED( hr ) )
{
button.SetIcon( hIcon );
}
注意:我正在使用 GetSystemMetrics()
获取小图标的标准尺寸,根据当前系统 DPI 进行缩放。如果您的应用程序仅system-DPI-aware,这就足够了。如果您的应用程序per-Monitor-DPI-aware,您可能会对GetSystemMetricsForDpi()
感兴趣,已由最近的 Windows 10 更新添加。
关于c++ - 改变 HICON 的尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47481145/