ImmSetCompositionStringで変換文字列設定について

[戻る]
Soleil 2007/12/26(水) 10:10:02
 現在、エディットボックスなどのコントロールを使わずに日本語入力処理を
行っています。
 入力は最大文字列数で制限しているため、変換完了後にオーバーした文字列
を削除しているようにしています。
 
 やりたいことは、削除処理を変換文字列に行いたいのですが、
ImmSetCompositionString関数で変換文字列を渡すと、変換が行われてし
まうので、これを行わないようにしたいのですが方法はあるでしょうか?

 IMEを起動させずに入力処理を自前で行い、変換キーが押されたらIMEを起動し
て、変換文字列をImmSetCompositionString関数でセットするという方法しか思
いつかないので、IMEを起動したまま、変換文字列を制限する方法があれば、
よろしくお願いします。


  以下処理コードになります

void CFEP::GetEditText(string& szString)
{
    if( m_hIMC == NULL )
    {
        return;
    }
    long    nSize = ImmGetCompositionString(m_hIMC,GCS_COMPSTR, NULL, 
0 );
    if( lSize == 0 )
    {
        return;
    }

    char*    pBuf  = new char[nSize+1];
    if( pBuf == NULL )    return;
    memset(pBuf,0,lSize+1);
    ImmGetCompositionString( m_hIMC, GCS_COMPSTR, pBuf, lSize );
    szString += pBuf;
    bool bAdjust=false;
    //文字長チェック
    for(;;)
    {
        string str = szString;
        str+=m_szString;
        if((int)str.length()<=m_nMaxLength)    break;
        OnBackSpace(szString); //最後尾の一文字削除処理
        bAdjust=true;
    }
    if(bAdjust)
    {
         //文字長制限した変換文字列をセットしたい
        ImmSetCompositionString( m_hIMC, SCS_SETSTR,(LPVOID)
szString.c_str(), szString.length() ,NULL,0);
    }

    delete []pBuf;
}

古いスレッドには追加発言できません。