首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在文本编辑器中支持IAccesible接口的正确解决方案是什么?

在文本编辑器中支持IAccesible接口的正确解决方案是什么?
EN

Stack Overflow用户
提问于 2013-03-28 18:02:06
回答 1查看 1.6K关注 0票数 13

我想从零开始实现一个文本编辑器,它支持IAccessible接口。我正在使用MFC和Win32 API。

当像记事本这样的标准文本编辑器中插入符号位置发生变化时,与插入符号运动对应的字母、词或行由客户端工具(如叙事者、JAWS等)宣布。我不知道如何实现这一功能。我搜索互联网并阅读MSDN文档。

我在http://msdn.microsoft.com/en-us/library/dd317978.aspxhttp://msdn.microsoft.com/en-us/library/dd373892.aspx中读到客户端从OS中通过AccessibleObjectFromWindow方法请求插入符号,并且OS将WM_GETOBJECT发送到应用程序。在相应的窗口回调函数中接收到WM_GETOBJECT消息,但用于插入符号移动事件的hWnd为NULL。我检查了线程消息队列,但是WM_GETOBJECT在线程消息队列中根本没有接收到。

有一种方法在某种程度上起了作用,但没有正确的解决方案,那就是调用

代码语言:javascript
运行
复制
NotifyWinEvent( EVENT_OBJECT_NAMECHANGE, hwnd, OBJID_CLIENT, CHILDID_SELF )

当插入符号按用户移动时。当客户端请求更改名称时,我将返回与插入符号运动相关的相应文本。

代码语言:javascript
运行
复制
HRESULT  CMyEditor::get_accName(VARIANT varChild, BSTR *pszName)
{
   *pszName = SysAllocString( L"CORESPONDING TEXT TO THE CARET MOVEMENT" );
   return S_OK;
}
EN

回答 1

Stack Overflow用户

发布于 2013-04-10 12:34:52

客户端将使用SetWinEventHook()函数来跟踪插入符号的下列事件:

  • EVENT_OBJECT_CREATE
  • EVENT_OBJECT_DESTROY
  • EVENT_OBJECT_SHOW
  • EVENT_OBJECT_HIDE
  • EVENT_OBJECT_LOCATIONCHANGE
  • EVENT_OBJECT_FOCUS

如果使用自定义控件,则需要使用NotifyWinEvent()亲自触发这些事件,特别是触发叙述的EVENT_OBJECT_LOCATIONCHANGE。

当客户端处理这些事件时,它应该使用IAccessible ()访问他正在跟踪的对象的AccessibleObjectFromEvent接口。

正如您所说的,Microsoft将处理此调用,并根据给AccessibleObjectFromEvent()的处理程序(应该是事件中包含的处理程序)向相应的窗口发送一条AccessibleObjectFromEvent消息。

当您收到插入符号的WM_GETOBJECT时,您应该返回相应的IAccessible接口,该接口将报告正确的accRole和accLocation。

如果您没有收到正确的WM_GETOBJECT消息,可能是因为您没有触发正确的事件。

您可以使用可访问事件监视程序来检查是否发送了正确的事件:http://msdn.microsoft.com/en-us/library/windows/desktop/dd317979%28v=vs.85%29.aspx

有关MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/dd318053%28v=vs.85%29.aspx上的活动可访问性服务器,请参见开发人员指南

编辑

另外,如果您使用Riched20.dll提供的标准插入符(在Rich中作为实例),文档规定,与其他UI元素不同,它没有关联的窗口句柄。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15689006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档