トップページ > 過去ログ > 記事閲覧
MakeKeyInputを使うとマウスクリックが反応しない
名前:史上最悪のデスペナ 日時: 2013/03/30 21:52

IDとPWを入力させるために、 IDHandleとPWHandleの二つを用意し、MakeKeyInputをそれぞれ行いました 入力欄をクリックするとハンドルが切り替わるようにしたのですが、どうもクリックがしばらく認識されないようです(ID→PWは反応しますがPW→IDは反応しません) プログラムはこんな感じです 自分で見直してみたのですがどこがおかしいか分からなかったので教えてください char ID[21]; char PW[21]; はLogin.hに宣言済み #include "Login.h" void C_Login::Init() { IDHandle = MakeKeyInput( 20, TRUE, TRUE, FALSE ); PWHandle = MakeKeyInput( 20, TRUE, TRUE, FALSE ); SetActiveKeyInput( IDHandle ); InputFlag = 0; MainGraph = LoadGraph( "data\\07\\ログイン画面.png" ); } void C_Login::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 C_Login::Draw( int X, int Y ) { GetMousePoint( &PosX, &PosY ); ClearDrawScreen(); DrawGraph( X/2-330, Y/2-210, MainGraph, 1 ); 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; } ScreenFlip(); } void C_Login::Login( int X, int Y ) { C_Login::Init(); while( ProcessMessage() != 1 ) { C_Login::Input( X, Y ); C_Login::Draw( X, Y ); } DeleteKeyInput( IDHandle ); DeleteKeyInput( PWHandle ); }

Page: 1 |

Re: MakeKeyInputを使うとマウスクリックが反応しない ( No.1 )
名前:管理人 日時:2013/03/31 19:05

載せて頂いたプログラムを実行してみましたが、問題なく切り替えができました 入力中の文字列を描画している領域と切り替えの判定に使用されている領域が 異なっていますが、それが原因というわけではないのでしょうか? ↓載せて頂いたプログラムを手元で実行できるようにしたプログラムです  クリック受付の領域を 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 ; }
Re: MakeKeyInputを使うとマウスクリックが反応しない ( No.2 )
名前:史上最悪のデスペナ(取りあえず解決) 日時:2013/03/31 20:36

新しく書いていただいたプログラムでは問題なく切り替えれました。 >入力中の文字列を描画している領域と切り替えの判定に使用されている領域が異なっていますが、それが原因というわけではないのでしょうか? それに関しては大丈夫です。範囲の判定には入れるのですがクリックしたかどうかの判定に入れないので。 もう一度自分のをやってみましたがやはりダメなようですね もう一度考えてみます

Page: 1 |