Какое правильное решение поддерживает интерфейс IAccesible для перемещения каретки в текстовых редакторах?
Я хочу реализовать текстовый редактор с нуля, который поддерживает интерфейс IAccessible. Я использую MFC и Win32 API.
Когда позиция каретки изменяется в стандартных текстовых редакторах, таких как Блокнот, соответствующая буква, слово или строка движения каретки произносятся такими инструментами клиента, как Рассказчик, JAWS и т. Д.не знаю, как реализовать эту функцию. Я ищу в Интернете и читаю документацию MSDN.
Я читаю вhttp://msdn.microsoft.com/en-us/library/dd317978.aspx а такжеhttp://msdn.microsoft.com/en-us/library/dd373892.aspx тот клиент запрашивает каретку с помощью метода AccessibleObjectFromWindow из ОС, и ОС отправляет WM_GETOBJECT приложению. Сообщения WM_GETOBJECT получены в соответствующей функции обратного вызова окна, но hWnd для события перемещения каретки равно NULL. Я проверил очередь сообщений потока, но WM_GETOBJECT не сделалвообще получить в очереди сообщений потока.
Один метод, который работал несколько, но не правильное решение, это вызвать
NotifyWinEvent( EVENT_OBJECT_NAMECHANGE, hwnd, OBJID_CLIENT, CHILDID_SELF )
когда каретка перемещается пользователем. И когда клиент запрашивает измененное имя, я возвращаю соответствующий текст, связанный с движением каретки.
HRESULT CMyEditor::get_accName(VARIANT varChild, BSTR *pszName)
{
*pszName = SysAllocString( L"CORESPONDING TEXT TO THE CARET MOVEMENT" );
return S_OK;
}