在高dpi(比如说,dpi120%)的环境下,mfc开发的AP中会有图标放大导致失真。
怎么才能知道32x32的图标会变大成多少呢。
用APIGetSystemMetrics(SM_CXICON)
取一下等到结果40。也就是说这时候图标显示成40x40。
解决这个问题的方法有2个
1,使用矢量图形,及时拉伸也不会失真变形。这样仅仅解决了图标的问题,放大
会对其他控件有没有影响,那就要具体问题具体分析了。
2,用api画出图标的实际大小
先来看下DrawIcon
msdn里面有写,DrawIcon相当于调用
DI_DEFAULTSIZE
Systemsmetric的值也就是经过放大的值,也就是40,所以如果用DrawIcon的话,32x32的图标就会被描画成40x40的。
相反,如果我们用DrawIconEx,指定大小32x32,并不指定DI_DEFAULTSIZE,这样就可以在高dpi的情况下,画出32x32的图标。
在实际中,用DrawIcon来画图标的例子很多,控件的话会在OnPaint或者DrawItem里面。所以知道这2个APi的区别之后就可以轻松
搞定这个问题。