ImmSetCompositionStringで変換文字列設定について – プログラミング – Home

通知
すべてクリア

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


Soleil
 Soleil
(@Soleil)
ゲスト
結合: 16年前
投稿: 1
 

 現在、エディットボックスなどのコントロールを使わずに日本語入力処理を
行っています。
 入力は最大文字列数で制限しているため、変換完了後にオーバーした文字列
を削除しているようにしています。
 
 やりたいことは、削除処理を変換文字列に行いたいのですが、
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;
}


引用解決済
トピックタグ

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました