| 
 | 
	
 
 本帖最后由 winbei2010 于 2016-10-17 17:14 编辑  
 
 
 
附上msdn上的描述: 
 
1,PROCESS_DPI_AWARENESS 
 
typedef enum _PROCESS_DPI_AWARENESS {  
  PROCESS_DPI_UNAWARE            = 0, 
  PROCESS_SYSTEM_DPI_AWARE       = 1, 
  PROCESS_PER_MONITOR_DPI_AWARE  = 2 
} PROCESS_DPI_AWARENESS; 
 
 
2,SetProcessDpiAwareness  
 
HRESULT WINAPI SetProcessDpiAwareness( 
  _In_ PROCESS_DPI_AWARENESS value 
);  
 
 
Return code 
S_OK ,执行成功 
E_INVALIDARG,执行失败,参数错误 
E_ACCESSDENIED,执行失败,返回具体错误码 
 
根据以上win api的描述,tc目前是告诉了windows,PROCESS_SYSTEM_DPI_AWARE  
 
我的程序会在启动的显示器上自己支持DPI aware, 所以不需要对我进行DWM 虚拟化。 但是当我的程序被拖动到其他DPI不一样的显示器时, 请对我们先进行system DWM虚拟化缩放。 
 
因为tc的界面压根就不支持dpi自动适配,这样的结果就造成,windows使用了xp的高dpi模式。很少有人为了这个**显示器吧。 
 
xp下界面上控件的缩放标准不一致,各自为政,然后大小不一。。。本来美观整洁的界面,变的扭曲变形。 
 
我在想官方要么真的实现高dpi自动缩放,这样最好,要么就让所有控件字体都用 MS Shell Dlg2,这样dpi是不会虚,不会变形的。 
 
再退一步,真不想费事再搞了。就把SetProcessDpiAwareness 这个模式改了吧PROCESS_DPI_UNAWARE ,告诉windows 我不支持 dpi缩放。自动等比放大好了 
 
宁可虚化也比严重变形好。高分屏以后越来越普及。 1080入门,尚且还好。2k以上tc的界面就没法看了,全靠猜。 
 
 
 
 |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册  
 
x
 
 
 
 
 |