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

最近的工作是給開源的DUILib支持Accessibility, 一些經(jīng)驗(yàn)記錄并分享下。

微軟的Accessibility其實(shí)Windows平臺(tái)上一個(gè)挺重要的東西, 盡管在國內(nèi)不受重視,但是如果你的軟件要出口歐美,Accessibility是必須的, 不然國外正規(guī)單位(政府,學(xué)校,大公司等)是禁止采購的。

如果我們的軟件用的是Winodws標(biāo)準(zhǔn)控件,一般Accessibility是系統(tǒng)默認(rèn)內(nèi)置支持的 (當(dāng)然這也不是一定的,據(jù)我測(cè)試系統(tǒng)的Date Time Picker控件是不支持MSAA的)。因?yàn)橄到y(tǒng)標(biāo)準(zhǔn)控件在展現(xiàn)和行為上的一些限制以及自繪的復(fù)雜性,越來越多的軟件使用DirectUI技術(shù),關(guān)于使用DirectUI的理由,更多參見<<如何讓窗口控件半透明>>和<<軟件換膚的原理>>.

國內(nèi)最有名的的DirectUI界面庫當(dāng)然是開源的DUILib (盡管這套庫已停止更新), 實(shí)際上我以前在自己業(yè)余寫點(diǎn)東西時(shí), 也參考過它, 具體參見<<開源一套DirectUI界面庫>>。對(duì)于開源的DUILib, 個(gè)人覺得它有挺多優(yōu)點(diǎn), 也有挺多缺點(diǎn), 我們重點(diǎn)說缺點(diǎn), 因?yàn)檫@是我們改進(jìn)的方向。

1。擴(kuò)展性差
    DUILib只實(shí)現(xiàn)了一些基本的控件,好的DirectUI庫可以通過基本控件組合來輕松實(shí)現(xiàn)復(fù)雜控件,而要達(dá)到這個(gè)效果, 很多時(shí)候我們需要攔截子控件的消息, 盡管DUILib提供了delegate機(jī)制來子類化子控件, 但是這樣消息攔來攔去實(shí)在太不方便了,很多時(shí)候自己都轉(zhuǎn)暈了。個(gè)人覺的這里我們可以引入WPF的隧道和冒泡機(jī)制, 這個(gè)東西對(duì)DirectUI界面庫實(shí)在太重要了。

2。不支持Layered窗口
要完美支持Layered窗口,意味著所有的Render全都要支持Alpha通道, DUILib使用GDI, 如果沒有特殊處理,意味著沒法完美支持Layered窗口, 我這篇也談到過這個(gè)問題<<如何基于純GDI實(shí)現(xiàn)alpha通道的矢量和文字繪制>>。

3。大數(shù)據(jù)時(shí)性能不行
DUILib很多時(shí)候只適合做些簡單的界面,本身控件基類很龐大,數(shù)據(jù)量方面對(duì)于幾百條數(shù)據(jù)還行,但是對(duì)于成千上萬條數(shù)據(jù)就吃不消了,這時(shí)我們需要引入WPF的虛表機(jī)制。

4。不支持圖文排版
盡管DUILib支持簡單的HTML排版, 但是畢竟太簡單,如果我們要在QQ那樣的聊天窗口里引入就吃不消了, 另外它渲染HTML那個(gè)代碼我是吃不消看的。

5. 基本不支持Accessibility

6。其他
接口和屬性定義太隨意, 采用導(dǎo)出類的方式也不好擴(kuò)充, 渲染方面最好能在GDI/GDI+/Direct2D方面進(jìn)行切換,最好將核心控件和擴(kuò)展控件分離開, 編輯器也太簡陋。

今天我們重點(diǎn)說Accessibility,一個(gè)界面庫要完整支持Accessibility, 要包括太多東西 (具體可以參見控制面板里的"輕松訪問中心"),我估計(jì)只有微軟自己做的到(比如WPF),這也是很多人推薦系統(tǒng)標(biāo)準(zhǔn)控件而排斥DirectUI的理由。我們說的Accessibility很多時(shí)候只是簡化版, 下面我們說重點(diǎn)的幾條。

1。鍵盤支持
鍵盤支持簡單來說就是即使我沒有鼠標(biāo), 我也能通過通過鍵盤完成所有操作。它主要包括鍵盤導(dǎo)航和控件的鍵盤支持。鍵盤導(dǎo)航主要是指我可以通過一些熱鍵(如F6)可以在不同窗口(Panel)之間進(jìn)行焦點(diǎn)切換, 我可以通過Tab/Shift+Tab在窗口內(nèi)不同控件之間進(jìn)行焦點(diǎn)導(dǎo)航。控件的鍵盤支持也是很多國內(nèi)DirectUI庫所缺失的,比如:
Dialog: Enter執(zhí)行默認(rèn), ESC退出并關(guān)閉
Button:空格執(zhí)行
CheckBox:空格取反
Radio:空格取反,上下左右鍵切換選中項(xiàng)
TabCtrl:焦點(diǎn)選中時(shí)上下左右切換, 焦點(diǎn)沒選中時(shí)Ctrl+Tab/Ctrl+Tab+Shift切換Tab頁
Menu:上下左右導(dǎo)航,Enter執(zhí)行, ESC取消關(guān)閉, 具體參見<<DirectUI中模態(tài)對(duì)話框和菜單的原理>>
....
總之,DUILib在鍵盤支持這塊已經(jīng)做了不少工作,但是還有挺多事要做,每個(gè)控件都要完整支持鍵盤是個(gè)很精細(xì)的活。

2。讀屏軟件和自動(dòng)化測(cè)試的支持。 
ScreenReader(讀屏器)主要是給盲人用的, 程序可以實(shí)時(shí)的把獲得焦點(diǎn)的控件和系統(tǒng)發(fā)生的事件播報(bào)出來, 很多讀屏軟件都需要收費(fèi),還好Win7之后系統(tǒng)已自帶讀屏軟件(控制面板\輕松訪問\輕松訪問中心\啟動(dòng)講述人)。自動(dòng)化測(cè)試時(shí)也需要工具能夠理解我們界面中包含的元素類型和位置, 以及模擬操作事件等。

DirectUI要支持讀屏和自動(dòng)化測(cè)試一般有2種方式, MSAA和UI Automation。 MSAA是比較古老的方式,主要就是實(shí)現(xiàn)IAccessible接口;UI Automation是微軟特意給WPF新增加的。MSAA出來的時(shí)候還是Win95, 因?yàn)闅v史原因有一些限制, 比如不支持Text控件,沒法描述復(fù)雜控件等, 所以微軟后來引入了UI Automation, 具體參見<<Windows GUI自動(dòng)化測(cè)試技術(shù)的比較和展望>>。 

MSAA最大的優(yōu)點(diǎn)是穩(wěn)定, 所以我在DUILib里采用MSAA來實(shí)現(xiàn)ScreenReader的支持。簡單說下幾個(gè)關(guān)鍵點(diǎn):
(a) 每個(gè)控件啊實(shí)現(xiàn)IAccessible接口的Proxy對(duì)象盡量獨(dú)立,里面保存一個(gè)控件指針的引用,這樣即使控件銷毀了,Proxy對(duì)象可以依舊存在(系統(tǒng)仍可能會(huì)訪問這個(gè)對(duì)象)。
(b) 按照控件的層次體系,實(shí)現(xiàn)每種控件的Proxy類(實(shí)現(xiàn)IAccessible接口)。
(c) WM_GETOBJECT請(qǐng)求OBJID_CLIENT時(shí)返回根節(jié)點(diǎn)的Proxy對(duì)象, 焦點(diǎn)變化時(shí)通知觸發(fā)事件NotifyWinEvent(EVENT_OBJECT_FOCUS, m_hWndPaint, (LPARAM)m_pFocus, CHILDID_SELF), 窗口收到WM_GETOBJECT消息時(shí)根據(jù)ObjectID(這里是控件指針)找到該控件, 然后返回該控件的Proxy。 (這是關(guān)鍵,這個(gè)問題郁悶了我好久的...) 

3。高對(duì)比(high contrast)的支持
高對(duì)比,主要是給色盲用,這個(gè)東西一般自繪程序都不會(huì)支持, 即使你是用標(biāo)準(zhǔn)控件,因?yàn)?/span>一般會(huì)用自己漂亮的圖片和色彩來表現(xiàn)界面, 高對(duì)比實(shí)現(xiàn)的關(guān)鍵點(diǎn)是你在畫每個(gè)元素時(shí)要通過GetSystemColor來獲取顏色。據(jù)我測(cè)繪除了微軟自己的程序, 其他越是漂亮的軟件越是不支持高對(duì)比(即使如QQ和Chrome)。

4。高DPI的支持
隨著Surface Pro和高分辨率設(shè)備的流行,程序?qū)Ω逥PI的支持正變得越來越重要, 具體參見<<關(guān)于Windows高DPI的一些簡單總結(jié)>>。傳統(tǒng)的基于標(biāo)準(zhǔn)控件的程序要支持高DPI是在太難了,所以微軟才有了DWM虛擬化。但是DirectUI對(duì)高DPI的支持有著天然的優(yōu)勢(shì), 我們完全可以在界面庫這層讓程序完美支持高DPI, 界面的渲染主要是文字,矢量和圖片, 文字和矢量完全可以通過無損縮放繪畫實(shí)現(xiàn),圖像可以通過適當(dāng)縮放和換圖來實(shí)現(xiàn)。

總結(jié)下,盡管我N次吐槽基于GDI的DirectUI界面庫會(huì)隨著XP的淡出而逐漸失去市場(chǎng), 但是實(shí)際工作中還是要經(jīng)常和GDI打交道,外面招聘單位還是有不少Windows客戶端的開發(fā)崗位。 在這"移動(dòng)互聯(lián)和"Web前端"橫行的"大數(shù)據(jù)"時(shí)代,很多同事開始向移動(dòng)App和大數(shù)據(jù)轉(zhuǎn)型, 盡管這幾年P(guān)C客戶端的開發(fā)人員是只出不進(jìn), 但是只要Windows存在一天,我們的工作就還是有價(jià)值的..
posted on 2014-11-15 00:01 Richard Wei 閱讀(8405) 評(píng)論(7)  編輯 收藏 引用 所屬分類: windows desktop

FeedBack:
# re: 如何給開源的DUILib支持Accessibility
2014-11-15 10:19 | 歌詞
來看看支持一下~  回復(fù)  更多評(píng)論
  
# re: 如何給開源的DUILib支持Accessibility
2014-11-17 14:35 | 臉上長粉刺是什么原因
挺好的,謝謝樓主的分享  回復(fù)  更多評(píng)論
  
# re: 如何給開源的DUILib支持Accessibility
2014-11-18 19:12 | WXX
如果真的要這么玩,不如往大了玩,看看 chromium 的 views。  回復(fù)  更多評(píng)論
  
# re: 如何給開源的DUILib支持Accessibility
2014-12-17 14:33 | bukebushuo
讀屏那個(gè)應(yīng)該不太可能了,dui本身就是一個(gè)無句柄方式的界面,與原先的訪問機(jī)制完全不一樣了(主要是獲取控件指針的方式,原先按點(diǎn)坐標(biāo)可以獲取控件窗口句柄,現(xiàn)在不行了),給控件加上你說的那個(gè)機(jī)制也達(dá)不到目的,除非是針對(duì)dui的界面寫專門的訪問接口,但是那樣的話,就不算通用方法了吧?
控件加鍵盤支持應(yīng)該是最簡單的,只要響應(yīng)下鍵盤消息就可以了,沒啥麻煩的,幾行代碼的事  回復(fù)  更多評(píng)論
  
# re: 如何給開源的DUILib支持Accessibility
2014-12-17 14:42 | Richard Wei
@bukebushuo
不知道老弟的界面庫賣的怎么樣了。

DUI支持讀屏我已經(jīng)做了, 就按我上面說的方法。
實(shí)際上QQ的界面庫也是支持讀屏的,有興趣的話可以在win7/win8上嘗試 “控制面板\輕松使用\輕松使用設(shè)置中心\啟動(dòng)講訴人”, 然后在QQ上通過Tab切換控件焦點(diǎn)。  回復(fù)  更多評(píng)論
  
# re: 如何給開源的DUILib支持Accessibility
2015-09-09 19:53 | longjoy
@Richard Wei
duilib支持MSAA了?不知道哪里可以下載到

正準(zhǔn)備用DUILIB,苦于不支持自動(dòng)化,發(fā)愁I(lǐng)ng  回復(fù)  更多評(píng)論
  
# re: 如何給開源的DUILib支持Accessibility
2015-09-09 20:14 | Richard Wei
@longjoy
按我上面說的做就可以了支持了,公司內(nèi)部代碼,外面應(yīng)該下載不到...  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美精品一区在线| 亚洲国产你懂的| 黄色日韩网站| 国产一区二区三区高清播放| 国产精品二区在线观看| 国产精品普通话对白| 国产热re99久久6国产精品| 国产日韩一区二区三区| 国产美女精品免费电影| 黄色精品网站| 一本综合久久| 性欧美长视频| 嫩草国产精品入口| 欧美激情二区三区| 一区二区三区日韩欧美| 午夜亚洲伦理| 欧美韩日一区二区三区| 欧美性事免费在线观看| 韩国福利一区| 亚洲一区二区三区精品在线| 久久资源av| 在线一区二区视频| 久久影音先锋| 国产精品成人免费精品自在线观看| 国产亚洲欧美一区二区三区| 日韩午夜av| 老鸭窝亚洲一区二区三区| 亚洲免费在线视频| 日韩亚洲国产欧美| 欧美一区二区三区免费视| 另类激情亚洲| 国产欧美日韩免费| 亚洲久久一区二区| 噜噜噜91成人网| 一本色道久久综合狠狠躁篇怎么玩| 欧美一区二区视频观看视频| 欧美激情亚洲精品| 黄色av日韩| 性色av一区二区怡红| 亚洲欧洲精品一区二区三区不卡 | 亚洲欧美另类中文字幕| 老巨人导航500精品| 亚洲视频999| 欧美人成免费网站| 亚洲国产精品激情在线观看| 久久精品女人| 亚洲欧美日韩国产一区| 欧美深夜福利| 一区二区三区四区国产| 欧美高清视频在线播放| 午夜在线观看欧美| 国产精品日韩欧美大师| 亚洲亚洲精品在线观看 | 精品成人a区在线观看| 亚洲宅男天堂在线观看无病毒| 91久久精品久久国产性色也91 | 国产精品国产| 亚洲性av在线| 亚洲午夜电影在线观看| 欧美日韩三级电影在线| 日韩亚洲欧美成人| 亚洲三级观看| 欧美日韩性视频在线| 日韩亚洲不卡在线| 99精品视频免费观看视频| 欧美日韩亚洲系列| 中文精品视频一区二区在线观看| 亚洲国产日韩欧美在线图片| 美日韩精品免费观看视频| 狠狠做深爱婷婷久久综合一区| 久久精品国产亚洲精品| 久久国产99| 亚洲国产日韩在线| 欧美激情小视频| 欧美日韩高清不卡| 亚洲专区在线| 性欧美暴力猛交69hd| 国内精品久久久久影院 日本资源| 久久伊人亚洲| 欧美体内she精视频在线观看| 激情五月婷婷综合| 久久久久久久久久码影片| 久久av资源网| 亚洲国内在线| 亚洲视频狠狠| 国产精品主播| 美女黄色成人网| 欧美二区视频| 亚洲一二区在线| 欧美一区二区三区另类| 亚洲风情亚aⅴ在线发布| 亚洲精品视频一区| 国产精品一区免费视频| 欧美a级大片| 欧美日精品一区视频| 久久久夜精品| 欧美日韩精品欧美日韩精品 | 欧美国产综合视频| 欧美日韩一区三区| 久久精品2019中文字幕| 免费不卡在线观看| 午夜精品久久久久| 麻豆91精品91久久久的内涵| 亚洲女人天堂av| 久久综合伊人77777| 亚洲欧美韩国| 欧美激情按摩| 久久久久久9999| 国产精品theporn88| 欧美va天堂| 国产日韩久久| 亚洲人成欧美中文字幕| 国内外成人免费视频| 99精品热视频| 亚洲精品五月天| 久久精品在线视频| 欧美亚洲一区三区| 欧美日韩免费一区二区三区| 欧美aaaaaaaa牛牛影院| 国产在线不卡| 亚洲欧美网站| 午夜精品福利一区二区三区av| 欧美成人精品一区二区| 毛片精品免费在线观看| 国产欧美亚洲日本| 亚洲性感美女99在线| 亚洲无线一线二线三线区别av| 欧美v日韩v国产v| 久久综合色88| 国语自产精品视频在线看8查询8| 一本久久综合| 亚洲最黄网站| 欧美黄色精品| 亚洲国产婷婷综合在线精品 | 欧美激情一区在线| 亚洲国产一区二区精品专区| 久久久精品午夜少妇| 久久人91精品久久久久久不卡| 国产精品午夜在线观看| 在线视频欧美精品| 午夜精品久久99蜜桃的功能介绍| 宅男在线国产精品| 久久亚洲欧美国产精品乐播| 欧美劲爆第一页| 欧美在线免费视屏| 欧美日韩在线一区二区三区| 亚洲日本va在线观看| 亚洲三级影片| 欧美片第一页| 亚洲视频中文字幕| 亚洲欧美在线免费观看| 国产精品自拍网站| 性欧美1819性猛交| 久久亚洲国产精品一区二区| 一区二区亚洲欧洲国产日韩| 久久这里有精品15一区二区三区 | 很黄很黄激情成人| 久久久精品tv| 亚洲黄一区二区| 亚洲在线观看| 国产一区久久| 欧美顶级少妇做爰| 一区二区三区欧美视频| 性xx色xx综合久久久xx| 国产婷婷色一区二区三区在线| 久久riav二区三区| 欧美gay视频激情| 宅男噜噜噜66一区二区| 国产欧美日韩精品一区| 久久综合色婷婷| 亚洲无毛电影| 欧美fxxxxxx另类| 亚洲伊人观看| 在线观看中文字幕不卡| 欧美日韩一区二区三区在线视频| 亚洲免费一级电影| 欧美激情中文字幕乱码免费| 亚洲欧美制服另类日韩| 亚洲国产精品黑人久久久| 欧美日韩在线观看一区二区三区| 欧美一区高清| 日韩亚洲一区在线播放| 久久嫩草精品久久久精品| 在线视频精品一区| 在线看片欧美| 国产日韩专区| 欧美日一区二区三区在线观看国产免| 欧美在线视频a| 日韩一级欧洲| 亚洲第一区在线观看| 亚洲欧美国内爽妇网| 亚洲国产一二三| 国产一区在线免费观看| 欧美视频在线免费| 欧美~级网站不卡| 久久av一区二区三区漫画| 一本久道久久综合狠狠爱| 欧美激情视频一区二区三区免费| 久久精品九九| 香蕉久久一区二区不卡无毒影院|