|
本帖最后由 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
|