トップページ > 過去ログ > 記事閲覧
MakeKeyInput関数について質問です
名前:さんま 日時: 2009/11/11 15:15

リファレンスを確認するとint SetActiveKeyInput(int InputHandle)は、キー入力が終了しているキー入力ハンドルを指定すると終了状態が 初期化され、再び入力出来るようにすることが出来ます。 との事ですが、簡単なプログラムで動作確認したところ思うように動作してくれません。 include "DxLib.h" #include <string.h> int InputHandle ; // 入力ハンドル int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウィンドウモードで起動 ChangeWindowMode( TRUE ); // DXライブラリ初期化 if( DxLib_Init() == -1 ) { return -1 ; } // 入力領域と文字出力領域との境界線を引く DrawLine( 0 , 320 , 640 , 320 , GetColor( 255 , 255 , 255 ) ) ; // 文字列入力ハンドルを作成する InputHandle = MakeKeyInput( 80 , FALSE , FALSE , FALSE ) ; // 作成した入力ハンドルをアクティブにする SetActiveKeyInput( InputHandle ) ; SetKeyInputString( "ここに文章を入力してください" , InputHandle ) ; // チャットループ while( !ProcessMessage() ) { // 文字列の入力が終っている場合 if( CheckKeyInput( InputHandle ) == 1 ) { char Message[ 81 ] ; // 入力された文字列を取得する GetKeyInputString( Message , InputHandle ) ; // 文字列表示域を黒で塗りつぶす DrawBox( 0 , 0 , 640 , 320 , 0 , TRUE ) ; // 入力した文字を描写する DrawString( 0 , 0 , Message , GetColor( 255 , 255 , 255 ) ) ; // 再度インプットハンドルをアクティブにする SetActiveKeyInput( InputHandle ) ; // 入力文字列を初期化する SetKeyInputString( "" , InputHandle ) ; } // 画面に入力中の文字列を描画する DrawBox( 0 , 320 + 2 , 640 , 480 , 0 , TRUE ) ; DrawKeyInputString( 0 , 320 + 2 , InputHandle ) ; DrawKeyInputModeString( 640 , 480 ) ; } // 時間待ち WaitTimer( 3000 ) ; DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } 原因分かる方いましたらご助言頂けると幸いです。

Page: 1 |

Re: MakeKeyInput関数について質問です ( No.1 )
名前:さんま 日時:2009/11/11 15:19

最初のインクルードは#が抜けてしまいました。 挙動としては、最初の文字列を入力すると フリーズしてしまいます。
Re: MakeKeyInput関数について質問です ( No.2 )
名前:white 日時:2009/11/11 23:09

とりあえずInputHandleを再入力できるように したいということでしたら // 入力文字列を初期化する SetKeyInputString( "" , InputHandle ) ; の部分を ReStartKeyInput(InputHandle ) ; に変えてみてはどうでしょうか。 ※2.25cで追加された機能のようなので、 関数リファレンスには説明がありませんが DxLib.hの中に説明があります。 あとは文字列用の格納領域を別に用意して 更新しながら描画位置をずらして行けば…。
Re: MakeKeyInput関数について質問です ( No.3 )
名前:さんま 日時:2009/11/11 23:58

>>whiteさま ご丁寧にありがとうございます。 そんな関数があったんですね! SetKeyInputString( "" , InputHandle ) ;ではなく、 SetActiveKeyInput( InputHandle ) ;を、 ReStartKeyInput(InputHandle ) ;に変えてみたところ、期待する動作をしてくれました。 本当にありがとうございます。
Re: MakeKeyInput関数について質問です ( No.4 )
名前:管理人 日時:2009/11/14 22:31

SetActiveKeyInput 関数に「既にアクティブハンドルに指定されている入力ハンドルが引数に 渡された場合は何もしない」という処理が悪さをして、入力が完了した入力ハンドルが渡された際も 何もせずに関数から出てしまっていました ご迷惑お掛けしました m(_ _;m もし修正版がご必要でしたらこちらをお使い下さい http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)

Page: 1 |