int count_for_ime = 0;
int count_timing = 100;
//////////////////////////////////////////////////////////////////////////////////////
// 入力文字列を描画する関数
void DrawOriginalInputString( int x, int y, int InputHandle, int OnePageListNum, int CursolColor = GetColor(255,255,255) )
{
char String[ 1024 ] ;
const IMEINPUTDATA *ImeData ;
int i, CursorPos, CursorDotPos, SelectClauseX, LineStartX, LineLength, StartNumber ;
int p_y = 480 - CANDIDATE_SPACE;
SetFontSize( HAN_MOJI_H ) ;
// 現時点での確定入力文字列を取得する
GetKeyInputString( String , InputHandle ) ;
// 確定入力文字列を描画する
//バッファ描画を別途行うので、不要
// DrawString( x, p_y, String, GetColor( 255,255,255 ) ) ;
// カーソルの位置を取得する
CursorPos = GetKeyInputCursorPosition( InputHandle ) ;
// カーソルのドット単位の位置を取得する
CursorDotPos = GetDrawStringWidth( String, CursorPos ) ;
// IME入力情報を取得する
ImeData = GetIMEInputData() ;
// IME入力情報があるかどうか(IME入力をしているかどうか)で処理を分岐
if( ImeData )//IME ON
{
count_for_ime++;
int IME_CURSOL_POS_X = ImeData->CursorPosition * HAN_MOJI_W;
bool is_ImeCursolPos_Kanji_1 = iskanji_1(ImeData->InputString[ImeData->CursorPosition]);
int IME_CURSOL_W = HAN_MOJI_W;
if(is_ImeCursolPos_Kanji_1)
IME_CURSOL_W += HAN_MOJI_W;
// IME入力をしている場合
// IMEで入力中の文字列の下地を黒で塗る
// DrawBox( CursorDotPos + x, y, CursorDotPos + x + strlen(ImeData->InputString)*9, y+HAN_MOJI_H, GetColor( 0,0,0 ), TRUE );
DrawBox( 0, p_y, strlen(ImeData->InputString)*HAN_MOJI_W, p_y+HAN_MOJI_H, GetColor( 0,0,0 ), TRUE );
// IMEで入力中の文字列を描画する
DrawString( 0, p_y, ImeData->InputString, GetColor( 255,255,0 ) );
if(count_for_ime % count_timing == 0)
{
printfDx("■ClauseNum:%d CursorPosition:%d InputString:%s\nSelectClause:%d IME_CURSOL_POS_X:%d isKanji1:%d\nConvertFlag:%d\n", ImeData->ClauseNum, ImeData->CursorPosition, ImeData->InputString
, ImeData->SelectClause, IME_CURSOL_POS_X, is_ImeCursolPos_Kanji_1, ImeData->ConvertFlag );
}
// 文節の数だけ下線を描画する
for( i = 0; i < ImeData->ClauseNum ; i++ )
{
if(count_for_ime % count_timing == 0)
{
if( i == ImeData->SelectClause )
{
printfDx("選択中 ", i, ImeData->ClauseData[ i ].Position);
}else
{
printfDx("選択外 ", i, ImeData->ClauseData[ i ].Position);
}
printfDx("ClauseData[%d].Position:%d ", i, ImeData->ClauseData[ i ].Position);
printfDx("ClauseData[%d].Length:%d ", i, ImeData->ClauseData[ i ].Length);
}
// 下線の開始座標を計算
LineStartX = GetDrawStringWidth( ImeData->InputString, ImeData->ClauseData[ i ].Position ) ;
// 下線の長さを計算
LineLength = GetDrawStringWidth( ImeData->InputString + ImeData->ClauseData[ i ].Position, ImeData->ClauseData[ i ].Length ) ;
// 下線の描画
DrawLine( LineStartX + 1, p_y + BOTTOMLINE_Y,
LineStartX + LineLength - 1, p_y + BOTTOMLINE_Y,
GetColor( 255,255,0 ) ) ;
// もし選択している文節だった場合は文節の開始座標を保存しておく
if( i == ImeData->SelectClause )
{
SelectClauseX = CursorDotPos + LineStartX + x ;
}
if(count_for_ime % count_timing == 0)
{
printfDx("\n");
}
}
// カーソルの描画
if( coursol_bright > 0 )
{ // ワープロ上の文字 変換中のIMEのカーソル位置にカーソルを表示
if( editor_type_buf[get_buf_gyo_no(in_y+in_s)][in_x] == TYPE_ZENKAKU1 || editor_type_buf[get_buf_gyo_no(in_y+in_s)][in_x] == TYPE_GAIJI_ZEN1 )
{
DrawCursol(x + CursorDotPos, y, coursol_overwrite, CursolColor, 2);
}else
{
DrawCursol(x + CursorDotPos, y, coursol_overwrite, CursolColor, 1);
}
// FEPライン上の文字 IMEの行は、常に上書きモードのカーソルを描画
if(ImeData->CursorPosition == strlen(ImeData->InputString)) // IME上の文字より、右端に隣接する場所のとき
{
// 小さい下線のみの描画
DrawBox(IME_CURSOL_POS_X, p_y+HAN_MOJI_H-1,IME_CURSOL_POS_X+IME_CURSOL_W, p_y+HAN_MOJI_H, GetColor( 255,255,0 ), TRUE);
}
if(ImeData->ConvertFlag == false) // 変換中ではないとき
{
DrawBox(IME_CURSOL_POS_X, p_y ,IME_CURSOL_POS_X+IME_CURSOL_W, p_y+HAN_MOJI_H, GetColor( 255,255,0 ), TRUE);
}else // 変換中のとき
{
DrawBox(IME_CURSOL_POS_X, p_y ,IME_CURSOL_POS_X+IME_CURSOL_W, p_y+HAN_MOJI_H, GetColor( 0,255,255 ), TRUE);
}
//DrawBox(GetDrawStringWidth( ImeData->InputString, ImeData->CursorPosition ), p_y,GetDrawStringWidth( ImeData->InputString, ImeData->CursorPosition )+HAN_MOJI_W, p_y+HAN_MOJI_H, GetColor( 255,255,0 ), TRUE);
}
// 変換候補リストが存在する場合は描画処理を行う
if( ImeData->CandidateNum )
{
//背景を黒で塗りつぶす
DrawBox( 0, 480 - CANDIDATE_SPACE, 680, 480, GetColor(0,0,0), TRUE );
// 変換候補リストの開始ナンバーを計算
StartNumber = ImeData->SelectCandidate / OnePageListNum * OnePageListNum ;
//【変換候補文字の描画】
// 変換候補リストの同時表示数に達するか、変換候補リストの終端に来るまでループ
for( i = 0; StartNumber + i < ImeData->CandidateNum && i < OnePageListNum; i ++ )
{
char koho[256];
//描画内容をセット
sprintf_s( koho, "%d.%s",i+1,ImeData->CandidateList[ StartNumber + i ] );
// 現在いる文節の描画(反転描画)
if( ImeData->SelectCandidate - StartNumber == i )
DrawString_hanten( i*120, 480-CANDIDATE_SPACE, koho, GetColor( 255,255,255 ) ) ;
else
DrawString( i*120, 480-CANDIDATE_SPACE, koho, GetColor( 255,255,255 ) ) ;
}
}
if(count_for_ime % count_timing == 0)
{
printfDx("\n\n");
}
}
else
{
// カーソルを描画
if( coursol_bright > 0 ) //IME OFFの状態のカーソル位置にカーソルを表示
{
if( editor_type_buf[get_buf_gyo_no(in_y+in_s)][in_x] == TYPE_ZENKAKU1 || editor_type_buf[get_buf_gyo_no(in_y+in_s)][in_x] == TYPE_GAIJI_ZEN1 )
{
DrawCursol(x+CursorDotPos, y, coursol_overwrite, CursolColor, 2);
}else
{
DrawCursol(x+CursorDotPos, y, coursol_overwrite, CursolColor, 1);
}
}
}
}