ããæè¿çå·¥ä½æ¯ç»å¼æºçDUILibæ¯æAccessibilityï¼ ä¸äºç»éªè®°å½å¹¶å享ä¸ã
ãã微软çAccessibilityå
¶å®Windowså¹³å°ä¸ä¸ä¸ªæºéè¦çä¸è¥¿ï¼ 尽管å¨å½å
ä¸åéè§ï¼ä½æ¯å¦æä½ ç软件è¦åºå£æ¬§ç¾ï¼Accessibilityæ¯å¿
é¡»çï¼ ä¸ç¶å½å¤æ£è§åä½ï¼æ¿åºï¼å¦æ ¡ï¼å¤§å
¬å¸çï¼æ¯ç¦æ¢éè´çã
ããå¦ææ们ç软件ç¨çæ¯Winodwsæ åæ§ä»¶ï¼ä¸è¬Accessibilityæ¯ç³»ç»é»è®¤å
ç½®æ¯æç ï¼å½ç¶è¿ä¹ä¸æ¯ä¸å®çï¼æ®ææµè¯ç³»ç»çDate Time Pickeræ§ä»¶æ¯ä¸æ¯æMSAAçï¼ãå 为系ç»æ åæ§ä»¶å¨å±ç°åè¡ä¸ºä¸çä¸äºéå¶ä»¥åèªç»çå¤ææ§ï¼è¶æ¥è¶å¤ç软件使ç¨DirectUIææ¯ï¼å
³äºä½¿ç¨DirectUIççç±ï¼æ´å¤åè§<<å¦ä½è®©çªå£æ§ä»¶åéæ >>å<< 软件æ¢è¤çåç >>.
ããå½å
ææåççDirectUIçé¢åºå½ç¶æ¯ å¼æºç DUILib ï¼å°½ç®¡è¿å¥åºå·²åæ¢æ´æ°ï¼ï¼ å®é
ä¸æ以åå¨èªå·±ä¸ä½åç¹ä¸è¥¿æ¶ï¼ ä¹åèè¿å®ï¼ å
·ä½åè§<< å¼æºä¸å¥DirectUIçé¢åº >>ã对äºå¼æºçDUILibï¼ ä¸ªäººè§å¾å®ææºå¤ä¼ç¹ï¼ ä¹ææºå¤ç¼ºç¹ï¼ æ们éç¹è¯´ç¼ºç¹ï¼ å 为è¿æ¯æ们æ¹è¿çæ¹åã
ãã1ãæ©å±æ§å·®
ããDUILibåªå®ç°äºä¸äºåºæ¬çæ§ä»¶ï¼å¥½çDirectUIåºå¯ä»¥éè¿åºæ¬æ§ä»¶ç»åæ¥è½»æ¾å®ç°å¤ææ§ä»¶ï¼èè¦è¾¾å°è¿ä¸ªææï¼ å¾å¤æ¶åæ们éè¦æ¦æªåæ§ä»¶çæ¶æ¯ï¼ 尽管DUILibæä¾äºdelegateæºå¶æ¥åç±»ååæ§ä»¶ï¼ ä½æ¯è¿æ ·æ¶æ¯æ¦æ¥æ¦å»å®å¨å¤ªä¸æ¹ä¾¿äºï¼å¾å¤æ¶åèªå·±é½è½¬æäºã个人è§çè¿éæ们å¯ä»¥å¼å
¥WPFçé§éåå泡æºå¶ï¼ è¿ä¸ªä¸è¥¿å¯¹DirectUIçé¢åºå®å¨å¤ªéè¦äºã
ãã2ãä¸æ¯æLayeredçªå£
ããè¦å®ç¾æ¯æLayeredçªå£ï¼æå³çææçRenderå
¨é½è¦æ¯æAlphaééï¼ DUILib使ç¨GDIï¼ å¦æ没æç¹æ®å¤çï¼æå³ç没æ³å®ç¾æ¯æLayeredçªå£ï¼ æè¿ç¯ä¹è°å°è¿è¿ä¸ªé®é¢<< å¦ä½åºäºçº¯GDIå®ç°alphaééçç¢éåæåç»å¶ >>ã
ãã3ã大æ°æ®æ¶æ§è½ä¸è¡
ããDUILibå¾å¤æ¶ååªéååäºç®åççé¢ï¼æ¬èº«æ§ä»¶åºç±»å¾åºå¤§ï¼æ°æ®éæ¹é¢å¯¹äºå ç¾æ¡æ°æ®è¿è¡ï¼ä½æ¯å¯¹äºæåä¸ä¸æ¡æ°æ®å°±åä¸æ¶äºï¼è¿æ¶æ们éè¦å¼å
¥WPFçè表æºå¶ã
ãã4ãä¸æ¯æå¾ææç
ãã尽管DUILibæ¯æç®åçHTMLæçï¼ ä½æ¯æ¯ç«å¤ªç®åï¼å¦ææ们è¦å¨QQé£æ ·çè天çªå£éå¼å
¥å°±åä¸æ¶äºï¼ å¦å¤å®æ¸²æHTMLé£ä¸ªä»£ç ææ¯åä¸æ¶ççã
ãã5. åºæ¬ä¸æ¯æAccessibility
ãã6ãå
¶ä»
ããæ¥å£åå±æ§å®ä¹å¤ªéæï¼ éç¨å¯¼åºç±»çæ¹å¼ä¹ä¸å¥½æ©å
ï¼ æ¸²ææ¹é¢æ好è½å¨GDI/GDI+/Direct2Dæ¹é¢è¿è¡åæ¢ï¼æ好å°æ ¸å¿æ§ä»¶åæ©å±æ§ä»¶å离å¼ï¼ ç¼è¾å¨ä¹å¤ªç®éã
ããä»å¤©æ们éç¹è¯´Accessibilityï¼ä¸ä¸ªçé¢åºè¦å®æ´æ¯æAccessibility, è¦å
æ¬å¤ªå¤ä¸è¥¿ ï¼å
·ä½å¯ä»¥åè§æ§å¶é¢æ¿éç"è½»æ¾è®¿é®ä¸å¿"ï¼ï¼æ估计åªæ微软èªå·±åçå°ï¼æ¯å¦WPFï¼ï¼ è¿ä¹æ¯å¾å¤äººæ¨èç³»ç»æ åæ§ä»¶èææ¥DirectUIççç±ã æ们说çAccessibilityå¾å¤æ¶ååªæ¯ç®åçï¼ ä¸é¢æ们说éç¹çå æ¡ã
ãã1ãé®çæ¯æ
ããé®çæ¯æç®åæ¥è¯´å°±æ¯å³ä½¿æ没æé¼ æ ï¼ æä¹è½éè¿éè¿é®çå®ææææä½ãå®ä¸»è¦å
æ¬é®ç导èªåæ§ä»¶çé®çæ¯æãé®ç导èªä¸»è¦æ¯ææå¯ä»¥éè¿ä¸äºçé®ï¼å¦F6ï¼å¯ä»¥å¨ä¸åçªå£(Panel)ä¹é´è¿è¡ç¦ç¹åæ¢ï¼ æå¯ä»¥éè¿Tab/Shift+Tabå¨çªå£å
ä¸åæ§ä»¶ä¹é´è¿è¡ç¦ç¹å¯¼èªãæ§ä»¶çé®çæ¯æä¹æ¯å¾å¤å½å
DirectUIåºæ缺失çï¼æ¯å¦ï¼
ããDialogï¼ Enteræ§è¡é»è®¤ï¼ ESCéåºå¹¶å
³é
ããButtonï¼ç©ºæ ¼æ§è¡
ããCheckBoxï¼ç©ºæ ¼åå
ããRadioï¼ç©ºæ ¼ååï¼ä¸ä¸å·¦å³é®åæ¢éä¸é¡¹
ããTabCtrlï¼ç¦ç¹éä¸æ¶ä¸ä¸å·¦å³åæ¢ï¼ ç¦ç¹æ²¡éä¸æ¶Ctrl+Tab/Ctrl+Tab+Shiftåæ¢Tab页
ããMenuï¼ä¸ä¸å·¦å³å¯¼èªï¼Enteræ§è¡ï¼ ESCåæ¶å
³éï¼ å
·ä½åè§<< DirectUIä¸æ¨¡æ对è¯æ¡åèåçåç >>
ãã....
ããæ»ä¹ï¼DUILibå¨é®çæ¯æè¿åå·²ç»åäºä¸å°å·¥ä½ï¼ä½æ¯è¿ææºå¤äºè¦åï¼æ¯ä¸ªæ§ä»¶é½è¦å®æ´æ¯æé®çæ¯ä¸ªå¾ç²¾ç»çæ´»ã
ãã2ã读å±è½¯ä»¶åèªå¨åæµè¯çæ¯æã
ããScreenReader(读å±å¨)主è¦æ¯ç»ç²äººç¨çï¼ ç¨åºå¯ä»¥å®æ¶çæè·å¾ç¦ç¹çæ§ä»¶åç³»ç»åççäºä»¶ææ¥åºæ¥ï¼ å¾å¤è¯»å±è½¯ä»¶é½éè¦æ¶è´¹ï¼è¿å¥½Win7ä¹åç³»ç»å·²èªå¸¦è¯»å±è½¯ä»¶(æ§å¶é¢æ¿\è½»æ¾è®¿é®\è½»æ¾è®¿é®ä¸å¿\å¯å¨è®²è¿°äºº)ãèªå¨åæµè¯æ¶ä¹éè¦å·¥å
·è½å¤ç解æ们çé¢ä¸å
å«çå
ç´ ç±»ååä½ç½®ï¼ 以å模ææä½äºä»¶çã
ããDirectUIè¦æ¯æ读å±åèªå¨åæµè¯ä¸è¬æ2ç§æ¹å¼ï¼ MSAAåUI Automationã MSAAæ¯æ¯è¾å¤èçæ¹å¼ï¼ä¸»è¦å°±æ¯å®ç°IAccessibleæ¥å£ï¼UI Automationæ¯å¾®è½¯ç¹æç»WPFæ°å¢å çãMSAAåºæ¥çæ¶åè¿æ¯Win95ï¼ å 为åå²åå æä¸äºéå¶ï¼ æ¯å¦ä¸æ¯æTextæ§ä»¶ï¼æ²¡æ³æè¿°å¤ææ§ä»¶çï¼ æ以微软åæ¥å¼å
¥äºUI Automationï¼ å
·ä½åè§<< Windows GUIèªå¨åæµè¯ææ¯çæ¯è¾åå±æ >>ã
ããMSAAæ大çä¼ç¹æ¯ç¨³å®ï¼ æ以æå¨DUILibééç¨MSAAæ¥å®ç°ScreenReaderçæ¯æãç®å说ä¸å 个å
³é®ç¹ï¼
ãã(a) æ¯ä¸ªæ§ä»¶åå®ç°IAccessibleæ¥å£çProxy对象尽éç¬ç«ï¼éé¢ä¿åä¸ä¸ªæ§ä»¶æéçå¼ç¨ï¼è¿æ ·å³ä½¿æ§ä»¶éæ¯äºï¼Proxy对象å¯ä»¥ä¾æ§åå¨(ç³»ç»ä»å¯è½ä¼è®¿é®è¿ä¸ªå¯¹è±¡)ã
ãã(b) æç
§æ§ä»¶çå±æ¬¡ä½ç³»ï¼å®ç°æ¯ç§æ§ä»¶çProxyç±»(å®ç°IAccessibleæ¥å£)ã
ãã(c) WM_GETOBJECT请æ±OBJID_CLIENTæ¶è¿åæ ¹èç¹çProxyå¯¹è±¡ï¼ ç¦ç¹ååæ¶éç¥è§¦åäºä»¶NotifyWinEvent(EVENT_OBJECT_FOCUS, m_hWndPaint, (LPARAM)m_pFocus ï¼ CHILDID_SELF), çªå£æ¶å° WM_GETOBJECTæ¶æ¯æ¶æ ¹æ®ObjectID(è¿éæ¯æ§ä»¶æé)æ¾å°è¯¥æ§ä»¶ï¼ ç¶åè¿å该æ§ä»¶çProxyã (è¿æ¯å
³é®ï¼è¿ä¸ªé®é¢éé·äºæ好ä¹
ç...)
ãã3ãé«å¯¹æ¯(high contrast)çæ¯æ
ããé«å¯¹æ¯ï¼ä¸»è¦æ¯ç»è²ç²ç¨ï¼è¿ä¸ªä¸è¥¿ä¸è¬èªç»ç¨åºé½ä¸ä¼æ¯æï¼ å³ä½¿ä½ æ¯ç¨æ åæ§ä»¶ï¼å 为 ä¸è¬ä¼ç¨èªå·±æ¼äº®çå¾çåè²å½©æ¥è¡¨ç°çé¢ï¼ é«å¯¹æ¯å®ç° çå
³é®ç¹æ¯ä½ å¨ç»æ¯ä¸ªå
ç´ æ¶è¦éè¿GetSystemColoræ¥è·åé¢è²ãæ®ææµç»é¤äºå¾®è½¯èªå·±çç¨åºï¼ å
¶ä»è¶æ¯æ¼äº®ç软件è¶æ¯ä¸æ¯æé«å¯¹æ¯ï¼å³ä½¿å¦QQåChromeï¼ã
ãã4ãé«DPIçæ¯æ
ããéçSurface Proåé«å辨ç设å¤çæµè¡ï¼ç¨åºå¯¹é«DPIçæ¯ææ£åå¾è¶æ¥è¶éè¦ï¼ å
·ä½åè§<< å
³äºWindowsé«DPIçä¸äºç®åæ»ç» >>ãä¼ ç»çåºäºæ åæ§ä»¶çç¨åºè¦æ¯æé«DPIæ¯å¨å¤ªé¾äºï¼æ以微软ææäºDWMèæåãä½æ¯DirectUI对é«DPIçæ¯ææç天ç¶çä¼å¿ï¼ æ们å®å
¨å¯ä»¥å¨çé¢åºè¿å±è®©ç¨åºå®ç¾æ¯æé«DPIï¼ çé¢ç渲æ主è¦æ¯æåï¼ ç¢é åå¾çï¼ æååç¢éå®å
¨å¯ä»¥éè¿æ æ缩æ¾ç»ç»å®ç°ï¼å¾åå¯ä»¥éè¿éå½ç¼©æ¾åæ¢å¾æ¥å®ç°ã
ããæ»ç»ä¸ï¼å°½ç®¡æN次å槽åºäºGDIçDirectUIçé¢åºä¼éçXPçæ·¡åºèéæ¸å¤±å»å¸åºï¼ ä½æ¯å®é
å·¥ä½ä¸è¿æ¯è¦ç»å¸¸åGDIæ交éï¼å¤é¢æèåä½è¿æ¯æä¸å°Windows客æ·ç«¯çå¼åå²ä½ã å¨è¿"移å¨äºèå"Webå端"横è¡ç"大æ°æ®"æ¶ä»£ï¼å¾å¤åäºå¼å§å移å¨Appå大æ°æ®è½¬åï¼ å°½ç®¡è¿å å¹´PC客æ·ç«¯çå¼å人åæ¯åªåºä¸è¿ï¼ ä½æ¯åªè¦Windowsåå¨ä¸å¤©ï¼æ们çå·¥ä½å°±è¿æ¯æä»·å¼ç..
转载
温馨提示:答案为网友推荐,仅供参考