13

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 メソッドによってキャレットを要求することを読みましたOS から、OS が WM_GETOBJECT をアプリケーションに送信します。WM_GETOBJECT メッセージは対応するウィンドウ コールバック関数で受信されましたが、キャレット移動イベントの hWnd は NULL です。スレッド メッセージ キューを確認しましたが、スレッド メッセージ キューに WM_GETOBJECT がまったく受信されませんでした。

ある程度は機能したが、正しい解決策ではない方法の 1 つは、

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;
}
4

1 に答える 1