あれってDXライブラリの関数で無いんですかね・・・探したけれど見つからないのですよ・・・
というわけで見つかるまでの継ぎはぎとして作ってみました。
もっと美しくなるよ~とか、ここ無駄だよとか、こうしたほうが良いのでは?という意見がほしいです。
enum SYS_INPUTMODE{INIT=0,WAIT,SET};
/*****************************
*x,y:入力欄の座標
* *string:格納したい文字列
* *InpurHandle:キー入力ハンドル
******************************/
class SystemClass{
public:
static int InputString(int x,int y,char *string,int *InputHandle){
static int keywait=2; //入力モード
static int BScount=0; //バックスペースキーが押されているカウント
static bool BSFlag = false;
int ret;
int NowLen=0,NewLen=0;//文字数
char str[50];
int w;
ret = keywait;
switch(keywait){
//初期化
case INIT:
strcpy(str,"");
SetActiveKeyInput( *InputHandle ) ;
keywait=WAIT;
break;
//入力中
case WAIT:
NowLen=strlen(string);
GetKeyInputString( str , *InputHandle ) ;
DrawFormatString(x,y,GetColor(255,255,255),"%s",string);
w=GetDrawStringWidth( string , NowLen ) ;
DrawKeyInputString( x+w ,y , *InputHandle ) ;
//バックスペースキーが押されたとき
if( CheckHitKey( KEY_INPUT_BACK) == TRUE ){
if(BSFlag)
NewLen = -1;
//もし、入力文字数が0なら既入力文字列を1つ減らす
if(NewLen == -1 && (BScount == 0 || BScount > 30)){
NowLen --;
string[NowLen] = '\0';
}
if(NewLen >= 0) BSFlag = true;
BScount++;
//もし、入力文字数、既入力文字数が0なら操作を行わない。
}
else{
BScount = 0;
}
if( CheckKeyInput( *InputHandle ) != 0){
strcat(string,str);
keywait = SET;
}
break;
//何かあったときのための予備
case SET:
keywait = INIT;
break;
}
return keywait;
}
};
使い方はこんな感じです