HighDPI对应1 drawicon/drawiconex

在高dpi(比如说,dpi120%)的环境下,mfc开发的AP中会有图标放大导致失真。

怎么才能知道32x32的图标会变大成多少呢。

用APIGetSystemMetrics(SM_CXICON)

取一下等到结果40。也就是说这时候图标显示成40x40。

 

解决这个问题的方法有2个

1,使用矢量图形,及时拉伸也不会失真变形。这样仅仅解决了图标的问题,放大

    会对其他控件有没有影响,那就要具体问题具体分析了。

2,用api画出图标的实际大小

    先来看下DrawIcon

    msdn里面有写,DrawIcon相当于调用

   

      

DI_DEFAULTSIZE
Draws the icon or cursor using the width and height specified by the system metric values for cursors or icons, if the cxWidth and cyWidth parameters are set to zero.

      Systemsmetric的值也就是经过放大的值,也就是40,所以如果用DrawIcon的话,32x32的图标就会被描画成40x40的。

 

相反,如果我们用DrawIconEx,指定大小32x32,并不指定DI_DEFAULTSIZE,这样就可以在高dpi的情况下,画出32x32的图标。

 

在实际中,用DrawIcon来画图标的例子很多,控件的话会在OnPaint或者DrawItem里面。所以知道这2个APi的区别之后就可以轻松

搞定这个问题。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值