載せて頂いたプログラムを実行してみましたが、問題なく切り替えができました
入力中の文字列を描画している領域と切り替えの判定に使用されている領域が
異なっていますが、それが原因というわけではないのでしょうか?
↓載せて頂いたプログラムを手元で実行できるようにしたプログラムです
クリック受付の領域を DrawBox で分かるようにしてみましたので
よろしければ実行してみてください
#include "DxLib.h"
int IDHandle;
int PWHandle;
int PosX;
int PosY;
int InputFlag;
char ID[ 256 ];
char PW[ 256 ];
void Init()
{
IDHandle = MakeKeyInput( 20, TRUE, TRUE, FALSE );
PWHandle = MakeKeyInput( 20, TRUE, TRUE, FALSE );
SetActiveKeyInput( IDHandle );
InputFlag = 0;
}
void Input( int X, int Y )
{
if( (X/2-120<PosX) && (PosX<X/2+150) )
{
if( (Y/2-55<PosY) && (PosY<Y/2-20) )
{
if( (GetMouseInput()&&MOUSE_INPUT_LEFT) != 0 )
{
//ここに入ってこない(1分以上たつと入れるようになる)
GetKeyInputString( PW, PWHandle );
SetActiveKeyInput( IDHandle );
InputFlag = 0;
}
}
if( (Y/2+75<PosY) && (PosY<Y/2+150) )
{
if( (GetMouseInput()&&MOUSE_INPUT_LEFT) != 0 )
{
GetKeyInputString( ID, IDHandle );
SetActiveKeyInput( PWHandle );
InputFlag = 1;
}
}
}
}
void Draw( int X, int Y )
{
GetMousePoint( &PosX, &PosY );
ClearDrawScreen();
SetFontSize( 20 );
switch( InputFlag )
{
case 0:
if( CheckKeyInput(IDHandle) != 0 )
{
GetKeyInputString( ID, IDHandle );
DrawString( X/2-120, Y/2-25, ID, GetColor(255,255,255) );
} else {
DrawKeyInputString( X/2-120, Y/2-25, IDHandle );
}
DrawString( X/2-120, Y/2+105, PW, GetColor(255,255,255) );
break;
case 1:
DrawString( X/2-120, Y/2-25, ID, GetColor(255,255,255) );
if( CheckKeyInput(PWHandle) != 0 )
{
GetKeyInputString( PW, PWHandle );
DrawString( X/2-120, Y/2+105, PW, GetColor(255,255,255) );
} else {
DrawKeyInputString( X/2-120, Y/2+105, PWHandle );
}
break;
}
DrawBox( X/2 - 120, Y /2 - 55, X/2 + 150, Y/2 - 20, GetColor( 255,255,255 ), FALSE );
DrawBox( X/2 - 120, Y /2 + 75, X/2 + 150, Y/2 + 150, GetColor( 255,255,255 ), FALSE );
ScreenFlip();
}
void Login( int X, int Y )
{
Init();
while( ProcessMessage() == 0 )
{
Input( X, Y );
Draw( X, Y );
}
DeleteKeyInput( IDHandle );
DeleteKeyInput( PWHandle );
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE );
if( DxLib_Init() < 0 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
Login( 320, 240 );
DxLib_End() ;
return 0 ;
}