青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

我們知道,關于高DPI的支持, Windows XP時代就開始有了, 那時關于高DPI的支持比較簡單, 但是從Vista/Win7 到現在Win8 /Win8.1, Windows關于高DPI的支持已經發生了很大的變化, 下面我們依次簡單介紹下。

如果說以前XP時代我們還有理由不關注高DPI,  那么在移動設備時代和大顯示器的高分辨率時代, 我們就沒有理由不關注高DPI了, 比如Surface Pro的分辨率是1920x1080, 這種情況下如果系統我們不設置高DPI, 基本上就沒法觸摸和操作了,所以現在普通程序對高DPI的支持已經成為趨勢了。 

什么DPI? 全稱是dots per inch (DPI), 也就是每英寸的點數,在顯示器上就是每英寸的像素個數,Window上一般默認是96 dpi 作為100% 的縮放比率, 但是要注意的是該值未必是真正的顯示器物理值, 只是Windows里我們的一個參考標準。

下面我們思考為什么DPI設置高了之后, 我們看到的字體會變大? 因為系統字體是是以固定大小(宋體10號字,物理尺寸為(10/72)英寸)設計的, 當我們DPI設置高了之后 ,說明該字體要占有更多的像素, 在屏幕分辨率不變的前提下, 看起來也就大了。所以如果我們設置高DPI,通常也意味著我們的顯示器是高分辨率, 里面的字體看起來太小了, 我們需要提高DPI來把內容放大。

那么我們的程序如何才能支持高DPI? 對于高DPI的支持, 不同操作系統有不同的方案。通常來說如果我們程序支持高DPI, 意味著我們要對繪畫的內容進行相應的放大, 比如字體,圖片和控件等。當然, 如果我們用的是系統字體(比如GetStockObject(DEFAULT_GUI_FONT)), 那么這種情況下我們不用操心, 因為系統會對該字體在高DPI時進行相應的放大; 如果我們是用CreateFont自己創建的字體, 那就要我們自己對該字體進行放大了。

下面我們看XP是如何對高DPI進行支持的? 

XP對高DPI的支持比較差勁, 大部分情況下就是字體的放大, 當然我們程序也可以通過GetDeviceCaps(hDC, LOGPIXELSX)獲取DPI后自己對繪畫的內容進行縮放。

下面我們看Vista/Win7/Win8是如何對高DPI進行支持的?

我們知道Vista/Win7我們可以禁止DWM(Desktop Window Manager), 該模式我們稱之為Basic模式, 這種模式下的高DPI效果和XP一樣。

對于DWM沒有禁掉的情況, Vista/Win7/Win8 對高DPI的支持又分為2種情況, 具體看下圖: 

一種XP風格的高DPi支持, 這種方式我們上面討論過了;
還有一種是通過 DWM 虛擬化支持的 高DPI方式, 下面我們討論下該方式: 

該種方式的高DPI支持是通過DWM的縮放實現的, 具體過程是這樣的, 比如我們當前系統的DPI是200%, 我們程序運行時,系統會告訴你當前DPI仍然是96(100%), 所以我們程序會仍然按照100%的方式進行繪畫, 但是但是系統給我們的坐標是根據DPI縮小過后的(也就是我們對窗口調用GetWindowRect或是通過GetSystemMetrics(SM_CXSCREEN)得到的大小會比實際大小減半) , 當我們畫完之后, DWM再對整個窗口進行200% 放大后畫到屏幕上, 這樣看起來我們的程序就自動支持高DPI了。

 這種方式看起來很美妙, 但是它也有缺點, 主要是經過縮放后的內容看起來會變模糊, 比如文字會有明顯的鋸齒。

既然DWM虛擬化用戶效果有時不是那么好, 那么我們很多時候可能會自己支持高DPI, 如何讓我們的程序禁用該效果?
事實上我們可以對每個進程對DWM虛擬化的支持進行設置和查詢, 系統給我們提供了2個APi: SetProcessDPIAware  IsProcessDPIAware , 通過調用SetProcessDPIAware , 我們告訴系統不要對我們的程序進行DWM虛擬化。

這里還有特殊情況也提一下: 我們在高DPI下通過窗口句柄取到的坐標信息是和目標程序是否支持DWM虛擬化相關聯的, 我們對支持DWM虛擬化的程序窗口調用GetWindowRect, 取到的坐標也是經過DWM縮放后的坐標; 對禁用DWM虛擬化程序的窗口調用GetWindowRect, 取到的坐標則是沒有經過縮放的原始坐標。

 最后我們再討論下Win8.1 對高DPI的支持, WIn8.1對高DPi以3種方式支持 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;
下面我們依次討論這3種方式: 

第一種Unaware, 該種方式是告訴系統, 我的程序不支持DPI aware, 請通過DWM虛擬化幫我們實現。 該方式和上面Win7/Win8對高DPI的支持的實現基本一樣,主要區別是它通過GetWindowRect取到的坐標都是經過DWM縮放后的, 無論對方窗口是不是支持DWM虛擬化。

第二種方式是System DPI aware, 該方式下告訴系統, 我的程序會在啟動的顯示器上自己支持DPI aware, 所以不需要對我進行DWM 虛擬化。 但是當我的程序被拖動到其他DPI不一樣的顯示器時, 請對我們先進行system DWM虛擬化縮放。

第三種方式是Per Monitor DPI aware, 該方式是告訴系統, 請永遠不要對我進行DWM虛擬化,我會自己針對不同的Monitor的DPi縮放比率進行縮放。

再介紹下相關API:
SetProcessDpiAwareness :設置當前進程對高DPi的支持方式
GetProcessDpiAwareness :查詢某個進程對高DPI的支持方式
GetDpiForMonitor : 獲取某個Monitor的DPI
WM_DPICHANGED :當某個程序窗口被拖到另外一個DPI的Monitor時收到

最后,簡單總結下, 從上面我們可以看到微軟在不同操作系統上對高DPI支持的改進線路,很多方面也體現了他們對老程序兼容性上的考慮, DWM虛擬化雖然很簡單, 卻丟失了用戶體驗。  

PS, 我在我機器上測試發現,桌面程序基本上只有微軟自己的程序能做到在高DPI下完美支持, 其他大部分程序(即使如Chrome)也是通過DWM虛擬化實現的高DPI支持。當然現在WPF和Window store App基本上都是內置支持高DPI的。

統計下, 你們的程序支持高DPI嗎? 

                  High DPI Settings in Windows
posted on 2014-02-18 23:12 Richard Wei 閱讀(42038) 評論(10)  編輯 收藏 引用 所屬分類: windows desktop

FeedBack:
# re: 關于Windows高DPI的一些簡單總結
2014-03-03 09:22 | Won
Vista/Win7 125%與150%的處理方式,應該是XP與Vista模式的差別吧  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結
2014-03-04 19:14 | Richard Wei
@Won
確實,DWM虛擬化只有在大于125%時才會自動開啟  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結
2014-09-14 16:06 | Richard Wei
有人提到中文中夾雜英文的問題,不多說了,在外企呆過的同學應該都會不自覺地有這個習慣,并且有時候錯誤的中文還不如用原始的英文。  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結[未登錄]
2014-10-12 02:09 | gyj
感謝樓主。  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結
2014-11-22 21:32 | 好文章
windows 8下一般只有微軟的應用才完美支持hi-dpi的,“云團隊”率先在windows下完美支持hi-dpi設置,效率高,效果超好,大家可以看看 http://www.17team.cn  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結
2014-12-16 09:35 | craft
效果的確不錯,動畫很舒服。  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結
2015-01-01 23:56 | ibuick
Windows跟OSX比就是一垃圾貨  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結[未登錄]
2015-01-12 15:36 | David
@ibuick
明明是軟件為了兼容XP用了老舊的庫導致對新系統兼容性爛。。  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結
2016-02-08 11:01 | Nukepayload2
看來還是WPF之類的Direct UI有前途,不用管Dpi的事情,總是非常清晰,比例也總是非常協調。  回復  更多評論
  
# re: 關于Windows高DPI的一些簡單總結
2016-03-22 21:56 | xiabibi
然而擴展顯示器也無法分別設置不同的縮放級別喝喝了  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美承认网站| 欧美视频中文字幕| 91久久国产综合久久| 欧美日韩一区在线播放| 国产欧美日韩综合一区在线播放| 美日韩精品免费观看视频| 久久精品视频免费播放| 欧美日韩国产一中文字不卡| 国产农村妇女毛片精品久久麻豆| 国产精品激情电影| 国产精品一区二区欧美| 亚洲免费观看视频| 欧美一区二区三区视频在线观看 | 欧美日韩一二区| 欧美日韩成人一区| 国产精品美女久久福利网站| 国产精品国产三级国产 | 免费欧美视频| 亚洲精品小视频| 中国亚洲黄色| 性做久久久久久久久| 国产日韩欧美二区| 久久激情婷婷| 欧美精品一区二区三区久久久竹菊| 国产午夜亚洲精品不卡| 日韩视频中午一区| 欧美aaaaaaaa牛牛影院| 亚洲九九爱视频| 美日韩在线观看| 好吊视频一区二区三区四区| 亚洲女爱视频在线| 亚洲精品免费在线播放| 久久亚洲春色中文字幕| 国内精品视频666| 久久成人精品视频| 久久国产乱子精品免费女| 国内自拍亚洲| 亚洲国产激情| 欧美特黄一级| 亚洲影视中文字幕| 亚洲永久字幕| 久久亚洲午夜电影| 久久蜜桃资源一区二区老牛| 国产精品久久9| 亚洲欧美日韩一区二区三区在线观看 | 日韩视频二区| 99国产精品99久久久久久粉嫩| 欧美午夜视频在线| 性欧美暴力猛交另类hd| 亚洲欧美激情四射在线日| 国产情人综合久久777777| 久久久综合精品| 免费视频亚洲| 亚洲欧美日韩一区| 久久精品国产在热久久| 91久久久久久| 午夜精品久久久久久久99水蜜桃| 亚洲精品中文字| 一区二区欧美在线| 在线精品国精品国产尤物884a| 亚洲国产精品va在线看黑人动漫 | 欧美在线关看| 美日韩精品免费| 久久不射电影网| 国产精品r级在线| 亚洲电影免费| 激情五月婷婷综合| 亚洲女同性videos| 亚洲欧美日韩天堂一区二区| 开心色5月久久精品| 欧美在线亚洲在线| 欧美日韩中文字幕综合视频| 欧美成人dvd在线视频| 欧美激情视频一区二区三区免费| 国产视频一区在线观看| 99riav久久精品riav| 亚洲精品在线观| 欧美福利电影在线观看| 免费观看欧美在线视频的网站| 国产精品国产三级国产普通话蜜臀 | 久久精品99无色码中文字幕| 9久草视频在线视频精品| 久久综合久色欧美综合狠狠 | 在线观看av不卡| 午夜精品久久久久久久99水蜜桃 | 亚洲精品免费在线观看| 亚洲黄色成人久久久| 玖玖综合伊人| 欧美成人一区二区| 日韩视频在线一区| 国产精品久久一级| 亚洲欧美在线观看| 久久综合图片| 亚洲精品你懂的| 欧美a级片网| 亚洲视频大全| 农夫在线精品视频免费观看| 久久激情中文| 亚洲精选在线| 国产麻豆精品theporn| 久久久久久久久久码影片| 欧美激情精品久久久六区热门| 一区二区三区日韩在线观看| 国产日韩欧美综合一区| 欧美大片免费观看在线观看网站推荐| 国产精品美女久久久浪潮软件| 久久久久这里只有精品| 一区二区三区四区五区精品| 久久五月天婷婷| 欧美一区二区啪啪| 一本一本a久久| 亚洲精品乱码视频| 国产一区二区三区在线观看精品| 欧美日韩一区免费| 女人天堂亚洲aⅴ在线观看| 亚洲欧美久久久久一区二区三区| 亚洲国产精品成人一区二区| 亚洲欧美日韩区| 亚洲小说春色综合另类电影| 亚洲高清电影| 亚洲第一精品夜夜躁人人躁 | 美女性感视频久久久| 欧美人体xx| 牛牛精品成人免费视频| 欧美在线免费一级片| 午夜免费在线观看精品视频| aa成人免费视频| 日韩视频免费观看高清在线视频| 亚洲日韩视频| 亚洲激情第一区| 一区二区久久久久久| 日韩亚洲欧美中文三级| 亚洲私人影院| 亚洲欧美变态国产另类| 性久久久久久| 久久一区二区三区四区五区| 欧美大色视频| 国产精品国产精品| 国模 一区 二区 三区| 怡红院精品视频在线观看极品| 亚洲第一网站| 中文在线不卡| 久久午夜影视| 99国产一区二区三精品乱码| 亚洲一区二区三区四区五区午夜| 欧美一区二区三区在线免费观看| 久久久久国色av免费观看性色| 久热爱精品视频线路一| 国产精品女主播| 极品少妇一区二区三区| 亚洲大胆人体视频| 亚洲国产精品悠悠久久琪琪| 日韩一区二区精品葵司在线| 久久国产主播| 欧美日韩一区二区三区在线 | 欧美精品九九99久久| 韩国成人福利片在线播放| 日韩亚洲国产精品| 美女免费视频一区| 亚洲无线一线二线三线区别av| 久久精品亚洲精品| 国产亚洲精品aa午夜观看| 艳女tv在线观看国产一区| 老司机久久99久久精品播放免费| 亚洲伊人久久综合| 欧美日韩在线观看一区二区三区| 亚洲国产一区二区三区青草影视| 久久精品亚洲国产奇米99| 一区二区三区久久精品| 欧美日韩人人澡狠狠躁视频| 91久久精品www人人做人人爽 | 国产精品视频xxxx| 亚洲欧美日韩国产精品| 亚洲视频综合在线| 国产日本欧美一区二区三区| 欧美一区二区精品久久911| 亚洲欧美国产制服动漫| 欧美激情乱人伦| 日韩视频免费在线| 欧美日韩一区二区在线观看视频| 一区二区三区视频免费在线观看| 亚洲美女在线视频| 国产精品福利网| 久久国产黑丝| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美激情2020午夜免费观看| 亚洲精品乱码久久久久久黑人| 亚洲国产经典视频| 欧美日韩国产欧美日美国产精品| 亚洲一区日韩| 欧美在现视频| 亚洲乱码国产乱码精品精| 亚洲一区免费网站| 亚洲黄色片网站| 亚洲在线黄色| 夜色激情一区二区| 欧美在线播放一区| 一区二区三区四区五区视频| 欧美日韩www| 老司机aⅴ在线精品导航|