c++ - 使用 DrawIcon 绘制的 .ico 文件看起来有误

标签 c++ mfc ico

我的 C++ MFC 程序中的 .ico 文件中有几个图标。我使用 DrawIcon 和 DrawIconEx 将它们绘制到内存位图上,它们在可见内容的边缘出现了某种类似阴影的边框。像素看起来像是在图标的透明部分和我画成白色的区域。 Windows 似乎是

我使用 Axialis IconWorkshop、Visual Studio 编辑了 .ico 文件,并使用一些在线 ico-to-png 转换器查看了它们。在我用它们画画之前,它们看起来很好。它们多年来一直很好,但在过去几年中,Windows 8 或 Windows 10 发生了一些变化。

关于如何正确绘制这些东西有什么想法吗?

这是我的一个图标在图标编辑器中的样子:

enter image description here

然后它们在我的程序中看起来是如何错误的(为了让您看得更清楚,它们被放大了): enter image description here

我正在寻找可能对此有影响的视口(viewport)窗口或其他设备上下文设置。

我几乎发布了自己的答案,因为 DrawIconEx 似乎解决了问题,因为我有一个高 DPI 显示。但仔细观察,垃圾仍然存在,只是像素数适当减少,并没有被 DrawIcon 函数放大。

最佳答案

DrawIcon 和 DrawIconEx 函数在高 DPI 显示器上放大它们绘制的图标。尽管他们似乎试图以 1:1 的大小绘制图标,但仍有一些比例在进行。

有一些在线信息来源,但其中没有一个是有用的,它们一起暗示了问题的原因。我找到的唯一可能的解决方案是在同一个图标文件中创建一个 40x40 或 64x64 的图标,并让图标绘制函数获得正确的图标来绘制。

这不是真正的答案,因为我没有尝试在 ico 文件中使用不同大小的图标。我只是将我的应用程序切换为不了解高 DPI 显示。

关于c++ - 使用 DrawIcon 绘制的 .ico 文件看起来有误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35147735/

相关文章:

c++ - 将 MFC 库移植到 linux 和 ASSERT

c++ - 如何使用 CSpinButtonCtrl 类在 MFC 中动态创建旋转按钮控件?

html - Favicon 在 IE11 中不工作;适用于 FF 和 Chrome

c++ - 如何在wxWIdgets中显示清晰的图标

c++ - 类中 vector 的动态分配

c++ - 如何在 Qt 中调整像素图的大小?

C++读取/写入长值到二进制文件

c++ - try..catch 后的命令不起作用

Python PIL 有时无法将 ico 转换为 png

c++ - 无法退出 while 循环与 boolean 条件 c++