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