在C / C ++的Win32应用程序中,我正在使用(不是原作者)使用IPicture类在对话框中绘制位图的代码。它以正常大小工作,当用户将“文本放大率”缩放到150%时,图形自动缩放,但不是125%。
提醒一下,Windows允许您进入轻松访问(在Windows 7中)和“将文本和图标的大小更改为”正常(100%),中等(125%)或更大(150%)
当以100%运行时,IPicture以HIMETRIC(类似于TWIP)值20505加载图形(像素宽度大小775),当以150%运行时,在这些比例下,它在屏幕上正确绘制(第二个是放大的)但是,按比例正确),但在125%处,它具有正常尺寸(在较大的对话框中),HIMETRIC宽度为16404(小于其他两个,正确缩放)。
所以看起来由于某种原因,宽度和高度给出125%的超出规模值,尽管它们在100%(较小)和150%(较高)下正常工作。有什么想法吗?
编辑:
LONG gwWidth, gwHeight; // HIMETRIC units
m_spIPicture->get_Width(&gwWidth);
m_spIPicture->get_Height(&gwHeight);
{
char msg[80];
sprintf(&msg[0], "Preparing width %d height %d HIMETRICs\n", gwWidth, gwHeight);
OutputDebugString(msg);
}
其中
IPicture* m_spIPicture;
所有图形都是这样的,它不仅仅是我所询问的那个。每个报告的正确大小为125%,相同的值报告为100%和150%。
我很想手工做这些事情(至少,自己去做DPI并计算价值)。
编辑:混淆是为什么我得到100%和150%的相同值,但125%的缩放比例不同。随着任何编号系统的变化,我预计(通常)三种结果之一 - 没有变化,变化逐渐变高,变化逐渐变低。
在阅读有关DPI虚拟化的更多信息时,此页面http://msdn.microsoft.com/en-us/library/dd464659.aspx解释了这句话的谜团“当DPI设置为144时,操作系统会自动启用DPI虚拟化。” (注意144是150%模式)。
我还在学习这个应用程序(我从其他地方继承了它),但显然它不是DPI意识到的,这意味着它会虚拟化,在这种情况下(差不多)很好,但是虚拟化直到150%,这意味着我们有点吝啬125%。所以,我要么需要将其虚拟化为125%,要么意识到125%和150%,但至少现在我知道它为什么表现不同。
答案 0 :(得分:0)
将您的HIMETRIC值转换为20505得到8.073英寸;分成像素数(775)得到96 DPI。这是标准的Windows配置,到目前为止一直很好。
将您的HIMETRIC值转换为16404得到6.458英寸;分成像素数给出120 DPI。这正好是96 * 125%,所以看起来也好。
150%的设定应该给出144 DPI;那么HIMETRIC值应该是13670.你确定get_Width在这里返回与普通模式相同的值吗?
查看您调用Render
的示例代码非常有用。
答案 1 :(得分:0)
我现在不在办公室,所以我不能轻易地挖掘代码,但是,我希望第三个数字。我要么预计所有数字都是相同的,要么所有数字都不同,而且它们之间的一个可能原因就像它们似乎不合理(我不会厌恶你的解释)。在任何情况下,它都不起作用。我已经多次运行它检查不同的值,希望我错了,但我一直得到这些数字。
我会再次看一下,如果我没有看到任何与zillionth + 1次相关的不同行为,我会发布代码。
由于