I attended a few get-togethers with some Assistive Technology vendors a while back when they were on campus for an Accessibility conference. While eating dinner with one particular AT vendor, I had asked him what we, Visual Studio , could do to improve our Assistive Technology compatibility story. Next thing I knew, I was writing frantically on paper usually used for receipts.

  1. Consider allowing Graphics to take focus. If there s a control the mouse user can interact with, the keyboard user will most likely want to interact with that control in a similar fashion. Sure, there are workarounds, like telling the user to go to the menus to find the same functionality. But, depending on what the control does, it could mean a lot of extra steps, especially if the control is frequently used.
  2. All graphics should have an AA object. If it is too costly for the graphic to have an AA object, at least draw it as a bitmap. Never just paint graphics. These are black holes to ATs.
  3. Graphics should have a bitmap associated with it, especially for those that don t have AA objects or are just bitmaps. If the graphic is painted, it is critical that it have a tooltip. This at least gives ATs a chance to identify the graphic.
  4. Correct cursor location is returned. For example, the (x,y) screen coordinates for an italicized cursor is at the baseline.  I was told by the AT vendor that Word does not return Italicized cursor coordinates correctly, but I have not investigated this issue to confirm this at this time.
  5. After selecting text, the cursor must not disappear. The cursor must continue to blink based on OS Settings.  I was told by the AT vendor that Notepad does this correctly; Word does not, but I have not investigated this issue to confirm this at this time.  ATs may have to write special logic to determine cursor location.
  6. Use win32 API DrawFocusRect, even if you’ve drawn your own focus rect. I was told by the AT Vendor that there s a parameter you can pass in to draw the focus rectangle as invisible, but I didn t see it in the docs. It doesn t mean that it isn t possible. The AT s Off Screen Model goes by the focus rectangle drawn by DrawFocusRect, so if the AT can t find focus, although it is visible on the screen, this is the most likely cause.