none
TSF クライアント(テキストストア実装側)からコンポジションを開始する RRS feed

  • 質問

  • お世話になります。

    TSFを利用してテキストボックス擬きを作成しています。

    当Forumで質問させていただいている通り、まだ問題はありますが、一応キーボード入力を表示させることまでできています。

    環境:Win7(64bit) VC++ 2005 IME=Office IME 2010

     

    コンポジションはテキストサービスが管理していますが、アプリ(テキストストア実装側)でも管理できないでしょうか?

    やりたいことはフォーム上にソフトキーボードを用意し、その入力も管理したいのです。

    InsertTextAtSelectionで文字を入力し、StartCompositionすると

    OnStartCompositionが呼ばれたすぐ後にOnEndCompositionが呼ばれてコンポジションが終わってしまいます。

    以下はDoEditSessionメソッド内のソースです。

    // mContext はメンバ変数のITfContext
    // ec はDoEditSessionの引数のTfEditCookie
    ITfCompositionPtr aComposition;
    ITfContextCompositionPtr aContextComposition;
    hr = mContext->QueryInterface(&aContextComposition);
    if (SUCCEEDED(hr))
    {
    	ITfInsertAtSelectionPtr aInsert;
    	hr = mContext->QueryInterface(&aInsert);
    	if (SUCCEEDED(hr))
    	{
    		ITfRangePtr aRange;
    		hr = aInsert->InsertTextAtSelection(ec, 0, L"あ", 1, &aRange);
    		if (SUCCEEDED(hr))
    		{
    			hr = aContextComposition->StartComposition(ec, aRange, NULL, &aComposition);
    			if (SUCCEEDED(hr))
    			{
    				//ごにょごにょ
    			}
    		}
    	}
    }
    

     どのようにすればアプリケーション側からコンポジションを開始できるようになるでしょうか?

    どなたかご教示のほど、よろしくお願いいたします。

    2011年4月19日 7:33