入力関係の関数

  ジョイパッド入力関連関数

宣言int GetJoypadNum( void ) ;

概略ジョイパッドが接続されている数を取得する

引数なし
戻り値接続されているジョイパッドの数

解説  ジョイパッドがパソコンに接続されている数を取得します。

サンプル

 ありません



宣言int GetJoypadInputState( int InputType ) ;

概略ジョイパッドの入力状態を得る

引数 InputType : 入力状態を取得するパッドの識別子
        DX_INPUT_KEY_PAD1  : キー入力とパッド1
        DX_INPUT_PAD1    : パッド1
        DX_INPUT_PAD2    : パッド2
        DX_INPUT_PAD3    : パッド3
        DX_INPUT_PAD4    : パッド4
        DX_INPUT_KEY     : キー入力

戻り値パッドの入力状態

解説  指定した識別子のパッドの入力状態が返ります。
 入力状態取得タイプにキー入力とありますがこれはパッドとキー入力を別々に取得するのは面倒かなと思いつけた機能です、 DX_INPUT_KEY_PAD1 を指定するとキー入力と(キー入力のパッド入力の対応は以下の通り)パッド1の入力状態を得ることが出来ます。
 DX_INPUT_KEY は下記の対応表のキー入力部のみの入力状態を得ます。
 入力状態は int型 データとして返り、 次に示すパッドの入力マスクを戻り値とAND演算をして結果が0でなければそのボタンが押されている事を示します。

PAD_INPUT_DOWN // ↓チェックマスク(下キー or テンキーの2キー)
PAD_INPUT_LEFT // ←チェックマスク(左キー or テンキーの4キー)
PAD_INPUT_RIGHT // →チェックマスク(右キー or テンキーの6キー)
PAD_INPUT_UP // ↑チェックマスク(上キー or テンキーの8キー)
PAD_INPUT_1 // 1ボタンチェックマスク(Zキー)
PAD_INPUT_2 // 2ボタンチェックマスク(Xキー)
PAD_INPUT_3 // 3ボタンチェックマスク(Cキー)
PAD_INPUT_4 // 4ボタンチェックマスク(Aキー)
PAD_INPUT_5 // 5ボタンチェックマスク(Sキー)
PAD_INPUT_6 // 6ボタンチェックマスク(Dキー)
PAD_INPUT_7 // 7ボタンチェックマスク(Qキー)
PAD_INPUT_8 // 8ボタンチェックマスク(Wキー)
PAD_INPUT_9 // 9ボタンチェックマスク(ESCキー)
PAD_INPUT_10 // 10ボタンチェックマスク(スペースキー)
PAD_INPUT_28 // こんな感じで28番目のボタンまで対応しています(初期状態では11番以降はキーボードキーとの対応はありません)



パッド1の上ボタンが押されているか調べる

if( ( GetJoypadInputState( DX_INPUT_PAD1 ) & PAD_INPUT_UP ) == 0 ) { // 押されていない } else { // 押されている }

サンプル

 パッド1の9ボタン(ESCキー)が押されるまで待つ

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Cr , PadInput ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // 文字列の描画 DrawString( 150 , 240 - 32 , "パッドのSTARTボタンを押してください" , Cr ); // パッド1の9ボタンの入力待ち PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ; while( ( PadInput & PAD_INPUT_9 ) == 0 ) { // メッセージ処理 if( ProcessMessage() == -1 ) { break ; // エラーが発生したらループを抜ける } // パッド1の入力を取得 PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetJoypadAnalogInput( int *XBuf , int *YBuf , int InputType) ;

概略ジョイパッドのアナログ的なレバー入力情報を得る

引数 int *XBuf : パッドレバーの左右の入力状態を格納する int 型変数のアドレス
int *YBuf : パッドレバーの上下の入力状態を格納する int 型変数のアドレス
InputType : 入力状態を取得するパッドの識別子
        DX_INPUT_PAD1    : パッド1
        DX_INPUT_PAD2    : パッド2
        DX_INPUT_PAD3    : パッド3
        DX_INPUT_PAD4    : パッド4

戻り値 0:成功
 −1:エラー発生

解説  アナログジョイパッドは『どれだけ左にレバーを倒しているか』などの『倒している』『倒していない』の2種類では表現できない細かい入力が可能となっています。
 この関数はその細かい入力状態を得るためにあります。XBufに指定されたアドレスにはレバーの左右の入力状態を -1000 から 1000 までの数値で表現されたものが格納されます。 値はマイナスの場合はレバーは左側に倒されていることをを示し、プラスの場合は右側に倒していることを示します。つまり -1000 だった場合は一番左にレバーは倒されていることを示し、 1000 だった場合はその逆、と言うことになります。
 YBufに指定されたアドレスにはレバーの上下(前後)の入力状態を格納します、 格納される値は同じく -1000 から 1000 までの間でマイナスの場合はレバーは上に倒されていることを、 プラスの場合は下に倒されていることを示します。よって -1000 の場合は…と言うわけです。

 なお、アナログ的な入力ではないジョイパッドの場合はおそらく 0 か -1000 又は 1000 の値が常に格納されると思われます。
サンプル

 ジョイパッドのアナログ的入力状態を画面に表示します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Cr ; int InputX , InputY ; char String[ 64 ] ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 描画先画面を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // ESCキーが押されるまでループ while( ( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_9 ) == 0 ) { // メッセージ処理 if( ProcessMessage() == -1 ) { break ; // エラーが発生したらループを抜ける } // パッド1の入力を取得 GetJoypadAnalogInput( &InputX , &InputY , DX_INPUT_KEY_PAD1 ) ; // 画面に入力状態を表示する { ClearDrawScreen() ; wsprintf( String , "X = %d" , InputX ) ; DrawString( 0 , 0 , String , Cr ) ; wsprintf( String , "Y = %d" , InputY ) ; DrawString( 0 , 16 , String , Cr ) ; } // 裏画面の内容を表画面に反映させる ScreenFlip() ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetJoypadDirectInputState( int InputType, DINPUT_JOYSTATE *DInputState ) ;

概略ジョイパッドのDirectInputから取得できる情報を得る

引数 InputType : 入力状態を取得するパッドの識別子
        DX_INPUT_PAD1    : パッド1
        DX_INPUT_PAD2    : パッド2
        DX_INPUT_PAD3    : パッド3
        DX_INPUT_PAD4    : パッド4
DInputState : DirectInputから得られる情報を代入する DINPUT_JOYSTATE 型構造体のアドレス

戻り値 0:成功
 −1:エラー発生

解説  DirectInput は DirectX の入力機器を制御するための機能の名称で、 DXライブラリも DirectInput を使用してキーボードやゲームパッドの入力状態を取得しています。
 関数 GetJoypadInputState では DirectInput から得られる情報を扱いやすい状態にして戻り値として返しますが、 この関数では DirectInput から得られる入力情報を生で取得することになります。
 何故未加工のデータを取得できるようにするのかと言いますと、市販されているゲームパッドの右スティックが原因です。

 DirectInputから得られるゲームパッドの情報を代入する構造体 DINPUT_JOYSTATE は以下のようになっています。

struct DINPUT_JOYSTATE { int X ; // スティックのX軸パラメータ( -1000〜1000 ) int Y ; // スティックのY軸パラメータ( -1000〜1000 ) int Z ; // スティックのZ軸パラメータ( -1000〜1000 ) int Rx ; // スティックのX軸回転パラメータ( -1000〜1000 ) int Ry ; // スティックのY軸回転パラメータ( -1000〜1000 ) int Rz ; // スティックのZ軸回転パラメータ( -1000〜1000 ) int Slider[ 2 ] ; // スライダー二つ unsigned int POV[ 4 ] ; // ハットスイッチ4つ // ( 0xffffffff:入力なし 0:上 4500:右上 9000:右 13500:右下 // 18000:下 22500:左下 27000:左 31500:左上 ) unsigned char Buttons[ 32 ] ; // ボタン32個( 押されたボタンは 128 になる ) } ;

 見ての通りスティックは一つしか想定されていません。( Rx,Ry,Rz は回転パラメータなので二つ目のスティックを想定したものではありません )
 アナログスティックが二つ付いたゲームパッドが世に出る前に DirectInput が定義したデータ型なので仕方が無いのかもしれませんが、 ともあれ PlayStation のアナログスティック付きコントローラ( DUAL SHOCK )が登場した後からPC用のゲームパッドも DUAL SHOCK を模して二つのアナログスティックが付いたものが登場するようになりました。

 しかし、DirectInput の構造体にはに二つ目のスティックに対応するメンバー変数がありません・・・
そこでどうしたかというと・・・・各社適当に使われていないメンバー変数を二つ選び、そこに二つ目のスティック( 右スティック )の情報を代入することにしました・・・
 ある会社のゲームパッドの右スティックは横軸の値を Z に、縦軸の値を Rx に割り当て、また別の会社は横軸の値を Rx に、縦軸の値を Ry に、 また別の会社では横軸を Z に、縦軸を Rz に割り当てました。

 統一されていればDXライブラリ側で右スティックの情報が代入されているメンバー変数の値を見て右スティックの情報を返す専用の関数を用意できるのですが、 各社バラバラではそれができません。

 苦肉の策として、DirectInput から得られる情報をそのまま取得できるようにして、ライブラリ使用者の方に対応を委ねることにしたというわけです。( 主に対応はキーコンフィグになると思います )

サンプル

 DirectInput から取得できる情報を画面に表示します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { DINPUT_JOYSTATE input ; int i ; int Color ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 入力状態を取得 GetJoypadDirectInputState( DX_INPUT_PAD1, &input ) ; // 画面に構造体の中身を描画 Color = GetColor( 255,255,255 ) ; DrawFormatString( 0, 0, Color, "X:%d Y:%d Z:%d", input.X, input.Y, input.Z ) ; DrawFormatString( 0, 16, Color, "Rx:%d Ry:%d Rz:%d", input.Rx, input.Ry, input.Rz ) ; DrawFormatString( 0, 32, Color, "Slider 0:%d 1:%d", input.Slider[ 0 ], input.Slider[ 1 ] ) ; DrawFormatString( 0, 48, Color, "POV 0:%d 1:%d 2:%d 3:%d", input.POV[ 0 ], input.POV[ 1 ], input.POV[ 2 ], input.POV[ 3 ] ) ; DrawString( 0, 64, "Button", Color ) ; for( i = 0 ; i < 32 ; i ++ ) { DrawFormatString( 64 + i % 8 * 64, 64 + i / 8 * 16, Color, "%2d:%d", i, input.Buttons[ i ] ) ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetJoypadXInputState( int InputType, XINPUT_STATE *XInputState ) ;

概略ジョイパッドのXInputから取得できる情報を得る

引数 InputType : 入力状態を取得するパッドの識別子
        DX_INPUT_PAD1    : パッド1
        DX_INPUT_PAD2    : パッド2
        DX_INPUT_PAD3    : パッド3
        DX_INPUT_PAD4    : パッド4
XInputState : XInputから得られる情報を代入する XINPUT_STATE 型構造体のアドレス

戻り値 0:成功
 −1:エラー発生

解説  XInput は DirectX の Xbox360コントローラを制御するための機能の名称で、 DXライブラリも Xbox360コントローラについては XInput を使用して Xbox360コントローラの入力状態を取得しています。

 この関数は GetJoypadDirectInputState と同じように、XInput から取得できる生の情報を取得するための関数ですが、 Xbox360コントローラの入力情報も GetJoypadDirectInputState で取得することができます、 なのに何故 XInput の生の入力情報も取得できる関数があるのかと申しますと、 Xbox360コントローラの Lトリガーと Rトリガーの DirectInput での扱いが原因です。

 XInputから得られるゲームパッドの情報を代入する構造体 XINPUT_STATE は以下のようになっています。
struct XINPUT_STATE { unsigned char Buttons[ 16 ] ; // ボタン16個( 添字には XINPUT_BUTTON_DPAD_UP 等を使用する、 // 0:押されていない 1:押されている ) unsigned char LeftTrigger ; // 左トリガー( 0〜255 ) unsigned char RightTrigger ; // 右トリガー( 0〜255 ) short ThumbLX ; // 左スティックの横軸値( -32768 〜 32767 ) short ThumbLY ; // 左スティックの縦軸値( -32768 〜 32767 ) short ThumbRX ; // 右スティックの横軸値( -32768 〜 32767 ) short ThumbRY ; // 右スティックの縦軸値( -32768 〜 32767 ) } ; // XInputボタン入力定義 #define XINPUT_BUTTON_DPAD_UP (0) // デジタル方向ボタン上 #define XINPUT_BUTTON_DPAD_DOWN (1) // デジタル方向ボタン下 #define XINPUT_BUTTON_DPAD_LEFT (2) // デジタル方向ボタン左 #define XINPUT_BUTTON_DPAD_RIGHT (3) // デジタル方向ボタン右 #define XINPUT_BUTTON_START (4) // STARTボタン #define XINPUT_BUTTON_BACK (5) // BACKボタン #define XINPUT_BUTTON_LEFT_THUMB (6) // 左スティック押し込み #define XINPUT_BUTTON_RIGHT_THUMB (7) // 右スティック押し込み #define XINPUT_BUTTON_LEFT_SHOULDER (8) // LBボタン #define XINPUT_BUTTON_RIGHT_SHOULDER (9) // RBボタン #define XINPUT_BUTTON_A (12) // Aボタン #define XINPUT_BUTTON_B (13) // Bボタン #define XINPUT_BUTTON_X (14) // Xボタン #define XINPUT_BUTTON_Y (15) // Yボタン

 Xbox360コントローラに限定されているので DirectInput の情報よりシンプルです。
 そして左右スティックも左右トリガーも専用のメンバー変数が割り当てられています。

 このように XInput を使用することで問題なく状態が取得できる左右トリガーですが、 DirectInput では左トリガーも右トリガーも構造体 DINPUT_JOYSTATE のメンバー変数 Z に割り当てられています。
 どういうことかと言いますと、左トリガーを押し込んだときは Z の値がプラス方向に変化して、 右トリガーを押し込んだときは Z の値がマイナス方向に変化するというものです。
 つまり、左右のトリガーを同時に押し込んだときは Z の値は 0 になり、即ち何もトリガーを押していないときと変わらず、押しているかどうかを判断することができません。

 何故そんな仕様にしたのかは不明ですが、それに対応するために正常な入力情報を取得するための関数 GetJoypadXInputState があります。

 尚、GetJoypadXInputState は Xbox360コントローラが接続されている場合のみ使用可能な関数で、 Xbox360コントローラ以外のゲームパッドが接続されていてもエラーとなり、戻り値は -1 になりますのでご注意ください。

サンプル

 XInput から取得できる情報を画面に表示します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { XINPUT_STATE input ; int i ; int Color ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 入力状態を取得 GetJoypadXInputState( DX_INPUT_PAD1, &input ) ; // 画面に XINPUT_STATE の中身を描画 Color = GetColor( 255,255,255 ) ; DrawFormatString( 0, 0, Color, "LeftTrigger:%d RightTrigger:%d", input.LeftTrigger, input.RightTrigger ) ; DrawFormatString( 0, 16, Color, "ThumbLX:%d ThumbLY:%d", input.ThumbLX, input.ThumbLY ) ; DrawFormatString( 0, 32, Color, "ThumbRX:%d ThumbRY:%d", input.ThumbRX, input.ThumbRY ) ; DrawString( 0, 64, "Button", Color ) ; for( i = 0 ; i < 16 ; i ++ ) { DrawFormatString( 64 + i % 8 * 64, 64 + i / 8 * 16, Color, "%2d:%d", i, input.Buttons[ i ] ) ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0; }




宣言int SetJoypadDeadZone( int InputType, double Zone ) ;

概略ジョイパッドの方向入力の無効範囲を設定する

引数 InputType : 入力状態を取得するパッドの識別子
        DX_INPUT_PAD1    : パッド1
        DX_INPUT_PAD2    : パッド2
        DX_INPUT_PAD3    : パッド3
        DX_INPUT_PAD4    : パッド4
Zone : 新しい無効範囲( 0.0 〜 1.0 )、デフォルト値は 0.35

戻り値 0:成功
 −1:エラー発生

解説  指定のジョイパッドの方向入力の無効範囲を設定する為の関数です。

 無効範囲とは文字通り入力が無効になる範囲のことで、例えば初期値である 0.35 の場合、 ジョイパッドの方向入力用のスティックの傾きが 35% 以下の場合は何も傾いていないとして処理され、 35% 以上傾いて初めて傾いていると判断されるようになります。

 入力があるか、無いかのON/OFFで判断することが多いタイプのゲームではそれでも問題ありませんし、 寧ろ僅かに傾けただけで「入力あり」と判断されてしまうと反応が良すぎて操作感が悪いと感じてしまうこともありますが、 傾き具合に応じて移動速度が変化するようなゲームの場合は 35% の無効範囲は広すぎるので、 この関数を使って無効範囲を調節します。

 引数の Zone は 0.0 から 1.0 の間の値を渡し、0.0 で無効範囲 0%、1.0 で無効範囲 100% となります。

サンプル

 ありません





宣言int StartJoypadVibration( int InputType, int Power, int Time ) ;

概略ジョイパッドの振動を開始する

引数 InputType : 振動を開始するパッドの識別子
        DX_INPUT_PAD1    : パッド1
        DX_INPUT_PAD2    : パッド2
        DX_INPUT_PAD3    : パッド3
        DX_INPUT_PAD4    : パッド4
Power : 振動の強さ(0〜1000)
Time : 振動させる時間(ミリ秒単位)
    -1 で StopJoypadVibration が呼ばれるまで振動し続ける

戻り値 0:成功
 −1:エラー発生

解説  ジョイパッドの中には振動機能がついているものがありますが、 この関数はその機能を使用してパッドを振動させたい時に使います。
 振動機能のないパッドでは当然振動しません。

サンプル

 パッド1を最大の振動の強さで2秒間振動させます。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // エラーが起きたら直ちに終了 // 振動開始 StartJoypadVibration( DX_INPUT_PAD1, 1000, 2000 ) ; // 2秒間経過するまで待つ WaitTimer( 2000 ) ; // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }




宣言int StopJoypadVibration( int InputType ) ;

概略ジョイパッドの振動を停止する

引数 InputType : 振動を停止するパッドの識別子
        DX_INPUT_PAD1    : パッド1
        DX_INPUT_PAD2    : パッド2
        DX_INPUT_PAD3    : パッド3
        DX_INPUT_PAD4    : パッド4
戻り値 0:成功
 −1:エラー発生

解説  StartJoypadVibration関数で開始した振動を停止します。
 ただ、StartJoypadVibration 関数でも時間指定で自動的に振動を止めることは出来るので、 主に StartJoypadVibration 関数の時間指定で -1 を指定した場合に使用します。
サンプル

 ありません



  マウス入力関連関数

宣言int SetMouseDispFlag( int DispFlag );

概略マウスカーソルの表示設定フラグのセット

引数 DispFlag :  マウスの表示の有無を示すフラグ、TRUEで表示し、
       FALSEで表示をしない。
戻り値 0:成功
 −1:エラー発生

解説  マウスカーソルの表示の有無を設定します。TRUEで表示し、FALSEで表示しません(デフォルトではフルスクリーンモードではFALSE、ウインドウモードではTRUEとなっています)。
 フルスクリーンモードでマウスを使用したプログラムを作成する場合、マウスカーソルが見えなくては話にならないのでこの関数で見えるようにします。

サンプル

 マウスカーソルを表示状態にする

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // マウスを表示状態にする SetMouseDispFlag( TRUE ) ; // キー入力を待つ(『WaitKey』を使用) WaitKey() ; DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetMousePoint( int *XBuf, int *YBuf );

概略マウスカーソルの位置を取得する

引数 XBuf ,YBuf : マウスカーソル現在地のX座標とY座標を保存する
      int型変数のポインタ
戻り値 0:成功
 −1:エラー発生

解説  マウスカーソルの画面上での座標をXBufとYBufの示すint型変数に格納します。

サンプル

 マウスの座標を画面に表示する

Windows用
#include "DxLib.h" #include <stdlib.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char StrBuf[ 128 ] , StrBuf2[ 32 ]; int MouseX , MouseY ; int StringCr , BoxCr ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // マウスを表示状態にする SetMouseDispFlag( TRUE ) ; // 白色の値を取得 StringCr = GetColor( 255 , 255 , 255 ) ; // 黒の値を取得 BoxCr = GetColor( 0 , 0 , 0 ) ; // キーが押されるまでループ while( CheckHitKeyAll() == 0 ) { // マウスの位置を取得 GetMousePoint( &MouseX , &MouseY ) ; // 表示する文字列を作成 { lstrcpy( StrBuf , "座標 X" ) ; // 文字列"座標 X"をStrBufにコピー itoa( MouseX , StrBuf2 , 10 ) ; // MouseXの値を文字列にしてStrBuf2に格納 lstrcat( StrBuf , StrBuf2 ) ; // StrBufの内容にStrBuf2の内容を付け足す lstrcat( StrBuf , " Y " ) ; // StrBufの内容に文字列"Y"を付け足す itoa( MouseY , StrBuf2 , 10 ) ; // MouseYの値を文字列にしてStrBuf2に格納 lstrcat( StrBuf , StrBuf2 ) ; // StrBufの内容にStrBuf2の内容を付け足す } // 画面左上の領域に黒い四角を描き前に描いてあった // 文字列を消す DrawBox( 0 , 0 , 200 , 32 , BoxCr , TRUE ) ; // 座標文字列を描く DrawString( 0 , 0 , StrBuf , StringCr ) ; // メッセージ処理 if( ProcessMessage() == -1 ) { break ; // エラーが起きたらループを抜ける } // 一定時間待つ WaitTimer( 100 ) ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int SetMousePoint( int PointX , int PointY );

概略マウスカーソルの位置をセットする

引数PointX , PointY : 新しいマウスカーソルの位置
戻り値 0:成功
 −1:エラー発生

解説  マウスカーソルの位置を( PointX , PointY )の示す座標に移動します、 この関数を使うとマウスカーソルは強制的に指定の座標の移動する事になります。

サンプル

 1秒経つごとにマウスカーソルが指定の座標に戻されてしまうプログラム

Windows用
#include "DxLib.h" #include <stdlib.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Count ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // マウスを表示状態にする SetMouseDispFlag( TRUE ) ; // 現在のカウンタ値を得る『GetNowCount』関数使用 Count = GetNowCount() ; // キーが押されるまでループ while( CheckHitKeyAll() == 0 ) { // 前回のカウンタ参照から1秒たっているか判定 if( GetNowCount() - Count > 1000 ) { // 経っていたらマウスの位置を画面左上に移動 // マウスの位置をセット SetMousePoint( 0 , 0 ) ; // 現在のカウンタ値を得る Count = GetNowCount() ; } // メッセージ処理 if( ProcessMessage() == -1 ) { break ; // エラーが起きたらループを抜ける } } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }




宣言int GetMouseInput( void ) ;

概略マウスのボタンの状態を得る

引数なし
戻り値マウスの入力状態値

解説  マウスの入力状態値を得ます。
 戻り値を以下に示す定義値とAND演算し、結果が0でなければそのボタンが押されている事になります。

MOUSE_INPUT_LEFT  : マウス左ボタン
MOUSE_INPUT_RIGHT  : マウス右ボタン
MOUSE_INPUT_MIDDLE : マウス中央ボタン


  左ボタンが押されているか調べる

if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 ) { // 押されている } else { // 押されていない }


 尚、マウスのボタンが4ボタン以上ある場合は、 以下の定義値とAND演算することで4ボタン以上のボタンの押下状態を得ることが出来ます。

MOUSE_INPUT_4 : マウス4ボタン
MOUSE_INPUT_5 : マウス5ボタン
MOUSE_INPUT_6 : マウス6ボタン
MOUSE_INPUT_7 : マウス7ボタン
MOUSE_INPUT_8 : マウス8ボタン

注意!…
 マウス6・7・8ボタンの押下状態を取得する場合は、事前に
SetUseDirectInputFlag( TRUE ) ; を実行する必要があります。 ( WindowsVista 以降では、初期状態では DirectInput を使用しないので、マウス5ボタンまでしか取得できない為 )

サンプル

 マウス右ボタンが押されるまで待つ

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int MouseInput ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // マウスを表示状態にする SetMouseDispFlag( TRUE ) ; // マウスの入力を待つ MouseInput = GetMouseInput() ; while( ( MouseInput & MOUSE_INPUT_RIGHT ) == 0 ) { // メッセージ処理 if( ProcessMessage() == -1 ) { break ; // エラーが起きたらループから抜ける } // マウスの入力を得る MouseInput = GetMouseInput() ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetMouseInputLog2( int *Button, int *ClickX, int *ClickY, int *LogType, int LogDelete ) ;

概略マウスのボタンが押されたり離されたりした履歴を取得する

引数 Button : 押されたり離されたりしたボタンの値( MOUSE_INPUT_LEFT など )を
     保存するint型変数のアドレス
ClickX, ClickY : ボタンが押されたり離されたりした時のマウスカーソルのX座標とY座標を
         保存するint型変数のアドレス
LogType : ボタンが押されたのか又は離されたのかの情報( MOUSE_INPUT_LOG_DOWN など )を
      保存するint型変数のアドレス
LogDelete : ログの情報を削除するかどうかのフラグ( TRUE:削除する FALSE:削除しない )

戻り値  0:ボタンが押されたり離されたりした情報を取得した
 −1:ボタンが押されたり離されたりした情報は無かった

解説  マウスのボタンが押されたり離されたりしたときの情報( 押された or 離されたボタン、押された or 離されたときの座標、押されたのか又は離されたのかの情報 )を取得します。

 前回・若しくはソフト起動から始めての GetMouseInputLog2 呼び出しまでの間にマウスのボタンが押されたり離されたりしていなかった場合は −1が返り、 その場合は Button、 ClickX、 ClickY、 LogType で渡す変数のアドレスにも何も値を代入しません。

 前回・若しくはソフト起動から始めての GetMouseInputLog2 呼び出しまでの間にマウスのボタンが押されたり離されたりしていた場合は 0が返り、 押された or 離されたボタン( MOUSE_INPUT_LEFT 等、ボタンについて詳しくは GetMouseInput の解説を参照してください )が Button に、 ボタンが押された or 離されたときのマウスカーソルの座標が ClickX、 ClickY に、ボタンが押された( MOUSE_INPUT_LOG_DOWN )のか又は
離された( MOUSE_INPUT_LOG_UP )のかの情報が LogType に代入されます。

 一見 GetMousePointGetMouseInput の組み合わせがあればこの関数は必要が無い気がしますが、
この関数は


1.ボタンが押されたり離されたり瞬間の座標を取得できる

2.ボタンが押されたり離されたりした情報が蓄積されている


 の2点があるので、GetMousePoint と GetMouseInput の組み合わせでは代用できない関数となっています。
 まず、GetMousePoint と GetMouseInput を組み合わせたクリック検知とクリック座標取得の問題として


・クリックの取りこぼしが発生する

   プログラムの処理負荷が高く十分なフレームレート( 画面の更新頻度 )を確保できない場合は
  プログラムが GetMouseInput で入力状態を調べる間隔が長くなるため、GetMouseInput で入力状態を
  調べる間隔より短い時間でプレイヤーがマウスのボタンを押して離すとプログラムはプレイヤーが
  マウスのボタンを押したことを検知することができない。


・クリック座標のズレが発生する

   同じく処理負荷が高く十分なフレームレートを確保できない場合、GetMouseInput によりマウスの
  クリックを検出した後 GetMousePoint でマウスカーソルの座標を取得すると、実際にプレイヤーが
  クリックした座標からズレが発生することがあります。( 低いフレームレートでのマウスクリック
  検出の間にマウスカーソルが移動してしまっている場合があるので )


 の二つがあります。
 対して、GetMouseInputLog2 では『クリックの取りこぼしが発生する』に対しては『マウスのボタンが押されたり離されたりした情報が蓄積される』ので取りこぼしの心配が無く、 『クリック座標のズレが発生する』に対しては『マウスのボタンが押されたり離されたりした瞬間の座標が取得できる』ので、 主にフレームレートが低い場合に発生するマウスクリックの問題を解決することができます。

 蓄積されたクリック情報を取得する方法は『戻り値が−1になるまで何度もこの関数を呼ぶ』となります。
 この関数の戻り値が0だった場合は蓄積されたクリック情報がまだある可能性がありますので、 戻り値が−1( マウスのボタンが押されたり離されたりした情報が無かった )になるまで繰り返し GetMouseInputLog2 を呼ぶというわけです。

 尚、第5引数の LogDelete を FALSE にした場合は蓄積された『ボタンが押されたり離されたりした情報』を削除しないので、 LogDelete を FALSE にして呼ぶと、何度も同じ『ボタンが押されたり離されたりした情報』が返ってきます、 なので LogDelete は『ボタンが押されたり離されたりした情報』を削除したくない場合を除いて TRUE を渡すようにしてください。

サンプル

 0.5秒毎にマウスの左ボタンが押された or 離されたかを調べて、マウスの左ボタンが押された or 離された瞬間の座標に四角形を描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ClickX, ClickY, Button, LogType ; int DrawFlag, DrawX, DrawY, DrawColor ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 描画情報の初期化 DrawFlag = FALSE ; DrawX = 0 ; DrawY = 0 ; DrawColor = 0 ; // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // マウスのボタンが押されたり離されたりしたかどうかの情報を取得する if( GetMouseInputLog2( &Button, &ClickX, &ClickY, &LogType, TRUE ) == 0 ) { // 左ボタンが押されたり離されたりしていたら描画するかどうかのフラグを立てて、座標も保存する if( ( Button & MOUSE_INPUT_LEFT ) != 0 ) { DrawFlag = TRUE ; DrawX = ClickX ; DrawY = ClickY ; // 四角形の色を押された場合は白に、離された場合は紫にする DrawColor = LogType == MOUSE_INPUT_LOG_DOWN ? GetColor( 255,255,255 ) : GetColor( 255,0,255 ) ; } } // 描画するかどうかのフラグが立っていたら、マウスの左ボタンが押されたり離されたりした座標に小さい四角形を描画する if( DrawFlag == TRUE ) { DrawBox( DrawX - 8, DrawY - 8, DrawX + 8, DrawY + 8, DrawColor, TRUE ) ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; // 0.5秒待つ WaitTimer( 500 ) ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetMouseWheelRotVol( void ) ;

概略マウスホイールの回転量を得る

引数なし
戻り値マウスの入力状態値

解説  前回この関数が呼ばれてから今回この関数が呼ばれるまでにマウスホイールが回転した量を得ます。
 手前に回した分はマイナスの値として、奥に回した分はプラスの値として返ってきます。
サンプル

 何かキーが押されるまで回転量の合計を画面に表示し続けます。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Rot ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 return -1; // エラーが起きたら直ちに終了 // 裏画面を使用 SetDrawScreen( DX_SCREEN_BACK ) ; // 合計値を初期化 Rot = 0 ; // 何かキーが押されるまでループ while( CheckHitKeyAll() == 0 ) { // メッセージ処理 if( ProcessMessage() == -1 ) break ; // エラーが起きたらループから抜ける // 前回 GetMouseWheelRotVol が呼ばれてから今回までの回転量を足す Rot += GetMouseWheelRotVol() ; // 画面を初期化 ClearDrawScreen() ; // 画面に回転量を描画 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "%d", Rot ) ; // 裏画面の内容を表画面に表示 ScreenFlip() ; } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。






  タッチパネル入力関連関数

宣言int GetTouchInputNum( void ) ;

概略タッチされている箇所の数を取得する

引数なし
戻り値タッチパネルのタッチされている箇所の数

解説  タッチパネルのタッチされている箇所の数を取得するための関数です。
 例えば人差し指でタッチパネルに1箇所だけ触れている場合は戻り値が1になり、中指も使って2箇所触れている場合は戻り値が2になります。
 タッチパネルに触れていない場合は戻り値が0になります。

サンプル

 タッチパネルのタッチされている箇所に円を描画します。

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int i ; int PosX, PosY ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // タッチされている箇所の数だけ繰り返し for( i = 0 ; i < GetTouchInputNum() ; i ++ ) { // タッチされている箇所の座標を取得 GetTouchInput( i, &PosX, &PosY, NULL, NULL ) ; // タッチされている箇所の座標に円を描画 DrawCircle( PosX, PosY, 40, GetColor( 255, 255, 255 ), TRUE ) ; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetTouchInput( int InputNo, int *PositionX, int *PositionY, int *ID, int *Device ) ;

概略タッチされている箇所の情報を取得する

引数 InputNo : タッチされている箇所の番号
PositionX : タッチされている箇所のX座標を保存するint型変数のアドレス
PositionY : タッチされている箇所のY座標を保存するint型変数のアドレス
ID    : タッチされている箇所のIDを保存するint型変数のアドレス
Device  : タッチされているデバイス番号を保存するint型変数のアドレス
戻り値 0:成功
 −1:エラー発生

解説  InputNo で指定したタッチパネルのタッチされている箇所の情報を取得するための関数です。

 InputNo で指定できる番号は関数 GetTouchInputNum で取得できる「タッチされている箇所の数」から1を引いた数で、 例えば1箇所タッチされていたら InputNo は 0 のみ指定でき、2箇所タッチされていたら InputNo は 0 か 1 を指定でき、 どこもタッチされていなかった場合は InputNo には何の値も指定できないので、その場合に関数を呼ぶと必ずエラーになり戻り値が -1 になります。

 取得できる情報はタッチされている箇所の画面座標X,Yと、タッチ箇所毎に割り振られるID、タッチされているデバイスの番号の4つです。

 IDとデバイス番号はタッチされた箇所を追跡する場合に使用します( 例えば2箇所タッチされていた場合、 タッチしている指( など )を動かすと座標が変化してしまうので、 ID等が振られていないと前回の GetTouchInput で取得したタッチ箇所が移動したのか、 それとも別のタッチ箇所なのかを判別することができないからです )。
 いらない情報については NULL を指定することができるので、IDやデバイス番号が不要な場合は NULL を引数として渡します。

サンプル

  GetTouchInputNum のサンプルを参照してください。





  キーボード入力関連関数

宣言int CheckHitKeyAll( void ) ;

概略すべてのキーの押下状態を取得する(キーの特定はできない)

引数なし
戻り値 0:成功
 −1:エラー発生

解説  すべてのキーのどれかが押されているか判定し、結果を返します
 この関数で特定のキーを判定する事は出来ません。特定のキー入力を判定するには次のCheckHitKey関数を使用してください。

サンプル

 キー入力があるまで待つ

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Cr ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // 文字列の描画 DrawString( 200 , 240 - 32 , "キーを押してください" , Cr ); // キーの入力待ち while( CheckHitKeyAll() == 0 ) { // メッセージ処理 if( ProcessMessage() == -1 ) { break ; // エラーが発生したらループを抜ける } } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int CheckHitKey( int KeyCode ) ;

概略特定キーの入力状態を得る

引数KeyCode : 入力状態を取得するキーコード
戻り値1:押されている
 0:押されていない

解説  特定のキーの入力状態を得ます。例えば『I』キーの入力状態を調べたい場合は『CheckHitKey( KEY_INPUT_I )』として関数を呼びます。
 この『KEY_INPUT_I』はマクロを使用して定義したもので、すべてのキーに対してこのような選別子が定義されています。
 それを以下に記します。多いです

KEY_INPUT_BACK // バックスペースキー
KEY_INPUT_TAB // タブキー
KEY_INPUT_RETURN // エンターキー

KEY_INPUT_LSHIFT // 左シフトキー
KEY_INPUT_RSHIFT // 右シフトキー
KEY_INPUT_LCONTROL // 左コントロールキー
KEY_INPUT_RCONTROL // 右コントロールキー
KEY_INPUT_ESCAPE // エスケープキー
KEY_INPUT_SPACE // スペースキー
KEY_INPUT_PGUP // PageUPキー
KEY_INPUT_PGDN // PageDownキー
KEY_INPUT_END // エンドキー
KEY_INPUT_HOME // ホームキー
KEY_INPUT_LEFT // 左キー
KEY_INPUT_UP // 上キー
KEY_INPUT_RIGHT // 右キー
KEY_INPUT_DOWN // 下キー
KEY_INPUT_INSERT // インサートキー
KEY_INPUT_DELETE // デリートキー

KEY_INPUT_MINUS // −キー
KEY_INPUT_YEN // ¥キー
KEY_INPUT_PREVTRACK // ^キー
KEY_INPUT_PERIOD // .キー
KEY_INPUT_SLASH // /キー
KEY_INPUT_LALT // 左ALTキー
KEY_INPUT_RALT // 右ALTキー
KEY_INPUT_SCROLL // ScrollLockキー
KEY_INPUT_SEMICOLON // ;キー
KEY_INPUT_COLON // :キー
KEY_INPUT_LBRACKET // [キー
KEY_INPUT_RBRACKET // ]キー
KEY_INPUT_AT // @キー
KEY_INPUT_BACKSLASH // \キー
KEY_INPUT_COMMA // ,キー
KEY_INPUT_CAPSLOCK // CaspLockキー
KEY_INPUT_PAUSE // PauseBreakキー

KEY_INPUT_NUMPAD0 // テンキー0
KEY_INPUT_NUMPAD1 // テンキー1
KEY_INPUT_NUMPAD2 // テンキー2
KEY_INPUT_NUMPAD3 // テンキー3
KEY_INPUT_NUMPAD4 // テンキー4
KEY_INPUT_NUMPAD5 // テンキー5
KEY_INPUT_NUMPAD6 // テンキー6
KEY_INPUT_NUMPAD7 // テンキー7
KEY_INPUT_NUMPAD8 // テンキー8
KEY_INPUT_NUMPAD9 // テンキー9
KEY_INPUT_MULTIPLY // テンキー*キー
KEY_INPUT_ADD // テンキー+キー
KEY_INPUT_SUBTRACT // テンキー−キー
KEY_INPUT_DECIMAL // テンキー.キー
KEY_INPUT_DIVIDE // テンキー/キー
KEY_INPUT_NUMPADENTER // テンキーのエンターキー

KEY_INPUT_F1 // F1キー
KEY_INPUT_F2 // F2キー
KEY_INPUT_F3 // F3キー
KEY_INPUT_F4 // F4キー
KEY_INPUT_F5 // F5キー
KEY_INPUT_F6 // F6キー
KEY_INPUT_F7 // F7キー
KEY_INPUT_F8 // F8キー
KEY_INPUT_F9 // F9キー
KEY_INPUT_F10 // F10キー
KEY_INPUT_F11 // F11キー
KEY_INPUT_F12 // F12キー

KEY_INPUT_A // Aキー
KEY_INPUT_B // Bキー
KEY_INPUT_C // Cキー
KEY_INPUT_D // Dキー
KEY_INPUT_E // Eキー
KEY_INPUT_F // Fキー
KEY_INPUT_G // Gキー
KEY_INPUT_H // Hキー
KEY_INPUT_I // Iキー
KEY_INPUT_J // Jキー
KEY_INPUT_K // Kキー
KEY_INPUT_L // Lキー
KEY_INPUT_M // Mキー
KEY_INPUT_N // Nキー
KEY_INPUT_O // Oキー
KEY_INPUT_P // Pキー
KEY_INPUT_Q // Qキー
KEY_INPUT_R // Rキー
KEY_INPUT_S // Sキー
KEY_INPUT_T // Tキー
KEY_INPUT_U // Uキー
KEY_INPUT_V // Vキー
KEY_INPUT_W // Wキー
KEY_INPUT_X // Xキー
KEY_INPUT_Y // Yキー
KEY_INPUT_Z // Zキー
KEY_INPUT_0 // 0キー
KEY_INPUT_1 // 1キー
KEY_INPUT_2 // 2キー
KEY_INPUT_3 // 3キー
KEY_INPUT_4 // 4キー
KEY_INPUT_5 // 5キー
KEY_INPUT_6 // 6キー
KEY_INPUT_7 // 7キー
KEY_INPUT_8 // 8キー
KEY_INPUT_9 // 9キー


 ESCキーが押されているか調べる

if( CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // 押されていない } else { // 押されている }


サンプル

 Zキーが押されるまで待つ

Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Cr ; if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // 文字列の描画 DrawString( 230 , 240 - 32 , "Zキーを押してください" , Cr ); // Zキーの入力待ち while( CheckHitKey( KEY_INPUT_Z ) == 0 ) { // メッセージ処理 if( ProcessMessage() == -1 ) { break ; // エラーが発生したらループを抜ける } } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




宣言int GetHitKeyStateAll( char *KeyStateBuf ) ;

概略キーボードのすべてのキーの押下状態を取得する

引数char *KeyStateBuf : すべてのキーの押下状態を格納するバッファのポインタ
戻り値 0:成功
 −1:エラー発生

解説  CheckHitKey 関数はキーボードのキーの押下状態を取得するための関数です。
 沢山のキーの状態を CheckHitKey 関数で調べる場合は当たり前ですが沢山 CheckHitKey 関数を使わなければなりません。
 ですが、実は CheckHitKey 関数はとても無駄の多い関数です。
理由は聞かないで下さい。とにかく無駄が多い関数なのです。
 ですから複数のキーの状態を一度に知りたい場合は、 CheckHitKey 関数よりこの GetHitKeyStateAll 関数を使ってください。 この関数はすべてのキーについて CheckHitKey 関数を使った場合と同じものを一度に配列に格納してくれます。

例 Z キーの状態を知りたい場合
char Buf[ 256 ] ; GetHitKeyStateAll( Buf ) ; if( Buf[ KEY_INPUT_Z ] == 1 ) { // Zキーが押されている } else { // Zキーは押されていない }
 使うにはまず char 型変数 256 個の配列を宣言します。 必ず char 型で、数は 256 個でないといけません。
 そしてその配列のポインタをおもむろに GetHitKeyStateAll 関数に渡します。 そうすると GetHitKeyStateAll 関数は char 型配列にすべてのキーの押下状態を格納してくれます。
 あとは CheckHitKey 関数で知りたいキーを識別するために使っていた KEY_INPUT_Y や KEY_INPUT_ESCAPE 等を関数に渡した配列の要素番号にして、その要素が1かそれ意外か判断するだけです。 1なら押されていて、0だと押されていません。これだけです。
 何が便利か、といわれますと、CheckHitKey より手続きが面倒になったので何も便利になっているわけではないのですが、 とりあえず処理速度の効率を気にされる場合は是非使ってください。(^^;

 なお、キーの識別値一覧はすぐ上の CheckHitKey 関数の解説に載っています。

サンプル

 CとKとYのキーを一度に押すまで終了しないプログラムです。当然 CheckHitKey 関数でも同じことは出来ます。

Windows用
#include "DxLib.h" #define PI 3.1415926535897932384626433832795f int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char KeyBuf[ 256 ] ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; // メッセージの表示 DrawString( 0 , 0 , " C と K と Y のキーを同時に押したら終了します ", GetColor( 255 , 255 , 255 ) ) ; // 無限ループ while( 1 ) { // すべてのキーの状態を得る GetHitKeyStateAll( KeyBuf ) ; // CとKとYのキーが押されていたらループから抜ける if( KeyBuf[ KEY_INPUT_C ] == 1 && KeyBuf[ KEY_INPUT_K ] == 1 && KeyBuf[ KEY_INPUT_Y ] == 1 ) { break ; } // Windows 依存のメッセージ処理を行う if( ProcessMessage() == -1 ) break ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }

Android用
Windows用のプログラムの int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )int android_main( void ) に置き換える以外は Windows用のプログラムと同じです。




  半角文字入力関連関数

宣言 char GetInputChar( int DeleteFlag ) ;

概略文字入力バッファに溜まった文字データから1文字取得する

引数 int DeleteFlag : 取得した文字をバッファから削除するか、フラグ
              ( TRUE: 削除  FALSE : 削除しない )
戻り値0 :文字入力バッファには何もデータがない
それ以外:文字コード又は操作コード

    操作コード
    CTRL_CODE_BS : バックスペース
        CTRL_CODE_TAB : タブ
        CTRL_CODE_CR : 改行
        CTRL_CODE_DEL : DELキー

        CTRL_CODE_LEFT : ←キー
        CTRL_CODE_RIGHT : →キー
        CTRL_CODE_UP : ↑キー
        CTRL_CODE_DOWN : ↓キー
        CTRL_CODE_ESC : ESCキー
        CTRL_CODE_CMP : 操作コード敷居値

解説  キーボードの押下状態は CheckHitKey 関数で調べることが出来ます、 ですが CheckHitKey 関数は『今このキーが押されているか』という情報を知りたい場合には便利ですが、 『なんの文字が入力されたか』という情報を取得したい場合には大変不都合です。
 そこで登場するのがこの関数です。

 DXライブラリは内部で CheckHitKey 関数などによるキーボードの直接的な押下状態の取得以外に、 『なんの文字が入力されたか』という情報を随時保存しています。
 保存された入力データは、この GetInputChar 関数などで明示的に利用者がデータを取得されない限り保持されつづけます(限界はありますが…) このデータを保存する領域を 文字入力バッファ と呼びます。

 この関数はその文字入力バッファに溜まったデータの内のもっとも古い入力文字1文字を返します、 DeleteFlag は取得した文字を文字入力バッファから削除するかどうかを指定するフラグで、 TRUE の場合削除され、FALSE の場合は削除されません、削除されない場合は次にこの関数が呼ばれた時も前回と同じ文字データが返されます。
 何故こんなフラグが存在するのか、というのは意外と使って行く内に欲しくなってくると思ったからです。

 なお文字入力バッファには文字データだけが保存されるわけではありません、 一部の操作コードも保存されます。そのコードは上記の通り、#define により宣言された数値です。
 戻り値が操作コードなのか、文字コードなのかを判断するには戻り値が CTRL_CODE_CMP の値との大小で判断することが出来ます。

 戻り値 >= CTRL_CODE_CMP : 文字コード
 戻り値 <  CTRL_CODE_CMP : 操作コード
 戻り値 == 0        : 入力データ無し

 ちなみに、なにも文字が入力されず、文字入力バッファになにも文字がない場合は0が返されます。

サンプル

画面中央に入力された文字を随時表示します
Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char String[ 2 ] ; char InputChar ; // 画面モードの設定 SetGraphMode( 640 , 480 , 16 ) ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) { // エラーが起きたら直ちに終了 return -1; } // 入力される文字を随時画面中央に描画します { String[ 1 ] = 0 ; // ESCキーが押されるか、何らかの内部エラーが発生するまでループする while( !ProcessMessage() && ( CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) ) { // 文字入力バッファから文字を取得する InputChar = GetInputChar( TRUE ) ; // 操作コード以外の文字入力があった場合のみ表示処理を行う if( InputChar != 0 && InputChar >= CTRL_CODE_CMP ) { // 画面の消去 ClearDrawScreen() ; // 文字の保存 String[ 0 ] = InputChar ; // 描画 DrawString( 312 , 232 , String , GetColor( 255 , 255 , 255 ) ) ; } } } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; }




宣言 char GetInputCharWait( int DeleteFlag ) ;

概略  文字入力バッファに溜まった文字データから1文字取得する、 バッファになにも文字コードがない場合はキーが押されるまで待つ

引数 int DeleteFlag : 取得した文字をバッファから削除するか、フラグ
              ( TRUE: 削除  FALSE : 削除しない )
戻り値0 :文字入力バッファには何もデータがない
それ以外:文字コード又は操作コード

    操作コード
    CTRL_CODE_BS : バックスペース
        CTRL_CODE_TAB : タブ
        CTRL_CODE_CR : 改行
        CTRL_CODE_DEL : DELキー

        CTRL_CODE_LEFT : ←キー
        CTRL_CODE_RIGHT : →キー
        CTRL_CODE_UP : ↑キー
        CTRL_CODE_DOWN : ↓キー
        CTRL_CODE_ESC : ESCキー
        CTRL_CODE_CMP : 操作コード敷居値

解説  GetInputChar 関数の文字が入力されるまで待つ、バージョン です。それ以外は GetInputChar 関数と全く同じなので GetInputChar 関数の 解説を参照して下さい。

サンプル

ありません



宣言 int ClearInputCharBuf( void ) ;

概略  文字入力バッファをクリアする

引数 なし
戻り値0 :成功
−1:エラー発生

解説  GetInputChar 関数で取得できる文字入力バッファのデータを初期化します。
 この関数は、例としてアクションゲームのネームエントリーに GetInputChar 関数を利用しようとした場合、 ゲームプレイ中も滅茶苦茶にテンキーやショットキーを押すので文字入力バッファは滅茶苦茶な文字のデータが溢れています。
 この状態で GetInputChar 関数で入力文字を取得した場合、ゲーム中に操作のために押していたキーの文字データが延々と吐き出されるわけです。
 これではこまるのでネームエントリー処理前にこの関数で文字入力バッファを初期化するわけです。

サンプル

ありません



  日本語入力関連関数

宣言 int KeyInputString( int x , int y ,
            int CharMaxLength , char *StrBuffer ,
            int CancelValidFlag ) ;


概略キーボードによる文字列入力

引数 int x , y        : 入力中の文字列を描画する領域の左上座標
int CharMaxLength : 入力できる最大文字数(全角文字は2文字とする)
char *StrBuffer   : 入力した文字列を保存するバッファへのアドレス
int CancelValidFlag :  入力中のESCキーによるキャンセルが可能か
             否か(TRUE:可能 FALSE:不可能)
戻り値1 :問題なく入力を終了
2 :入力はキャンセルされた
−1:エラー発生

解説  キーボードによる文字列の入力を行います。引数 x , y を起点に入力中の文字列が表示されます。
 エンターキーを押すと入力が終了したとみなされ入力された文字列は StrBuffer の示すアドレスに格納されます。 なお入力できる最大文字数は CharMaxLength で指定します。 バッファ領域には CharMaxLength の分の文字が入る領域を確保しておかなければなりません。
 CancelValidFlag はキャンセルを有効にするかどうかというもので、これを TRUE にすると有効になり、 FALSE にするとキャンセルは出来なくなります。 キャンセルが有効な場合は ESC キーを押すと関数から出てきます。その場合は戻り値が2になります。

サンプル

名前を聞いてくるので名前を入力します。その後それを表示するだけのプログラムです。
Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char Name[ 31 ] ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1 ; // 名前入力指示文字列の描画 DrawString( 0 , 0 , "名前を入力してください" , GetColor( 255 , 255 , 255 ) ) ; // 名前の入力 KeyInputString( 0 , 16 , 30 , Name , FALSE ) ; // 画面の初期化 ClearDrawScreen() ; // 名前の表示 DrawString( 0 , 0 , "あなたの名前は" , GetColor( 255 , 255 , 255 ) ) ; DrawString( 0 , 16 , Name , GetColor( 255 , 255 , 255 ) ) ; // キー入力待ち WaitKey() ; // DXライブラリの使用終了 DxLib_End() ; // 終了 return 0 ; }




宣言 int KeyInputSingleCharString( int x , int y , int CharMaxLength ,
                  char *StrBuffer , int CancelValidFlag ) ;


概略キーボードによる半角文字列のみの入力

引数 int x , y : 入力中の文字列を描画する領域の左上座標
int CharMaxLength : 入力できる最大文字数(全角文字は2文字とする)
char *StrBuffer : 入力した文字列を保存するバッファへのアドレス
int CancelValidFlag : 入力中のESCキーによるキャンセルが可能か否か(TRUE:可能 FALSE:不可能)
戻り値1 :問題なく入力を終了
 2 :入力はキャンセルされた
 −1:エラー発生

解説  KeyInputString の半角文字列のみを入力できるようにしたものです。 漢字やひらがななどの2バイト文字は入力することが出来ません。
その他の動作は KeyInputString と同じものです。

サンプル

名前を英字で入力するよう聞いてきます。入力後、それを画面に表示します。
Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char Name[ 31 ] ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1 ; // 名前入力指示文字列の描画 DrawString( 0 , 0 , "名前を英字で入力してください" , GetColor( 255 , 255 , 255 ) ) ; // 名前の入力 KeyInputSingleCharString( 0 , 16 , 30 , Name , FALSE ) ; // 画面の初期化 ClearDrawScreen() ; // 名前の表示 DrawString( 0 , 0 , "あなたの名前は" , GetColor( 255 , 255 , 255 ) ) ; DrawString( 0 , 16 , Name , GetColor( 255 , 255 , 255 ) ) ; // キー入力待ち WaitKey() ; // DXライブラリの使用終了 DxLib_End() ; // 終了 return 0 ; }




宣言 int KeyInputNumber( int x , int y , int MaxNum , int MinNum ,
              int CancelValidFlag ) ;


概略キーボードによる数値の入力

引数 int x , y : 入力中の文字列を描画する領域の左上座標
int MaxNum , MinNum : 入力する数値の最大値と最小値
int CancelValidFlag : 入力中のESCキーによるキャンセルが可能か
               否か(TRUE:可能 FALSE:不可能)
戻り値MaxNum + 1 の値 : 処理はキャンセルされた
 MinNum - 1 の値 : エラー発生
 上記以外の値 : 正常に入力して得た数値

解説  キーボードによる数値入力を行います。入力中の文字列は x , y を起点とした領域に描画されます。
 この関数のみ入力した数値が直接返ってきます。 

サンプル

描画する線の長さを入力し、その後その長さの線を描画します。
Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int LineLength ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1 ; // 線の長さ入力指示文字列の描画 DrawString( 0 , 0 , "線の長さを入力してください(0〜640)" , GetColor( 255 , 255 , 255 ) ) ; // 線の長さ入力 LineLength = KeyInputNumber( 0 , 16 , 640 , 0 , FALSE ) ; // 画面の初期化 ClearDrawScreen() ; // 線の描画 DrawLine( 0 , 100 , LineLength , 100 , GetColor( 255 , 255 , 255 ) ) ; // キー入力待ち WaitKey() ; // DXライブラリの使用終了 DxLib_End() ; // 終了 return 0 ; }




宣言 int SetKeyInputStringColor( int NmlStr , int NmlCur ,
                   int IMEStrBack , int IMECur ,
                   int IMELine , int IMESelectStr ,
                   int IMEModeStr , int NmlStrE ,
                   int IMESelectStrE , int IMEModeStrE ,
                   int IMESelectWinE , int IMESelectWinF ,
                   int SelectStrBackColor , int SelectStrColor ,
                   int SelectStrEdgeColor , int IMEStr ,
                   int IMEStrE
) ;


概略KeyInputString系 関数使用時の文字の各色を変更する

引数 int NmlStr : 入力文字列の色
int NmlCur : IME非使用時のカーソルの色
int IMEStrBack : IME使用時の入力文字列の周りの色
int IMECur : IME使用時のカーソルの色
int IMELine : IME使用時の変換文字列の下線
int IMESelectStr : IME使用時の選択対象の変換候補文字列の色
int IMEModeStr : IME使用時の入力モード文字列の色(『全角ひらがな』等)
int NmlStrE : 入力文字列の縁の色
int IMESelectStrE : IME使用時の選択対象の変換候補文字列の縁の色
int IMEModeStrE : IME使用時の入力モード文字列の縁の色
int IMESelectWinE : IME使用時の変換候補ウインドウの縁の色
int IMESelectWinF : IME使用時の変換候補ウインドウの下地の色
int SelectStrBackColor : 入力文字列の選択部分( SHIFTキーを押しながら左右キーで選択 )の周りの色
int SelectStrColor : 入力文字列の選択部分( SHIFTキーを押しながら左右キーで選択 )の色
int SelectStrEdgeColor : 入力文字列の選択部分( SHIFTキーを押しながら左右キーで選択 )の縁の色
int IMEStr : IME使用時の入力文字列の色
int IMEStrE : IME使用時の入力文字列の縁の色
戻り値 0:成功
 −1:エラー発生

解説  KeyInputString , KeyInputSingleCharString 等の キーボードデータ入力関数中で表示される文字その他の色を変更します。 設定する色については GetColor 関数で取得できる色コードを使用します。
 格引数については上記の説明文を参考にして下さい。
 尚、「縁の色」については、関数 ChangeFontType を使用して縁( エッジ )ありのフォントにしていない場合はある場合のみ変更を確認することができます。

サンプル

 ありません



宣言 int MakeKeyInput( int MaxStrLength , int CancelValidFlag ,
           int SingleCharOnlyFlag , int NumCharOnlyFlag ) ;


概略新しいキー入力データの作成

引数 int MaxStrLength : 入力できる最大文字数(半角文字単位)
int CancelValidFlag : ESCキーによるキャンセル機能の有無(TRUE:有 FALSE:無)
int SingleCharOnlyFlag : 半角文字のみの入力か否か(TRUE:半角文字のみ
                                  FALSE:フラグ無効)
int NumCharOnlyFlag : 数値文字のみの入力か否か(TRUE:数字文字のみ
                                  FALSE:フラグ無効)
戻り値−1         :エラー発生
 それ以外の数値 :キー入力ハンドル(識別番号)

解説  この関数から以下のすべての関数は上記の直接的な文字列入力関数とは違い、 すべてこの関数で得られる『キー入力ハンドル』という識別番号を使用してキー入力を行うための関数となります。
 そもそもDXライブラリを使用したソフトでチャットソフトを作成するとなると、 キー入力を常に受けつけながら相手から送信されたメッセージをいつでも受け取れるようにしなくてはならないので、 そのようなキー入力では上記の KeyInputString 等のキー入力が終了するまで関数から処理が抜けないタイプの関数では対応できません。
 そこでキー入力は勝手にやらせておいて、それとは別に相手からメッセージが来た場合はすぐに画面に表示するような処理をするためにキー入力ハンドルというものを使用したキー入力手段を用意しました。

 その方法を以下に示します。

1.MakeKeyInput で目的に合ったキー入力ハンドルを作成

2.SetActiveKeyInput 作成したキー入力ハンドルをアクティブにする、 以降キーの入力はアクティブにしたキー入力ハンドルが受け持つデータ 領域に流れます。

3.CheckKeyInput でキー入力が終了したか調べる、終っていないうちは DrawKeyInputString でキー入力の途中経過を画面の好きなところに 描画する。
 必要であれば現在の入力モードを DrawKeyInputModeString を使用 して描画する。

4.キー入力が終っていたら GetKeyInputString 又は GetKeyInput Number で入力結果の文字列(又は数値)を得る

5.DeleteKeyInput で作成したキー入力ハンドルを削除する

 ここでは最初の MakeKeyInput 関数について、この関数では作成したキー入力ハンドルで入力できる文字の数をまず MaxStrLength で指定します、 単位は半角文字単位で日本語のひらがな・漢字などは半角でいう2文字になりますので注意してください。
 次に CancelValidFlag は入力にキャンセルを有効にするかどうか、です。 有効にした場合は ESC キーを押すことによって入力はキャンセルされます。 キャンセルされたのか、正常に入寮が終了したのかは (6-19)CheckKeyInput 関数によって知ることが出来ます。 なお有効にする場合は TRUE , しない場合は FALSE をセットします。
 次に SingleCharOnlyFlag ですがこれは日本語文字などのいわゆる2バイト文字(全角文字)の入力を出来ないようにするか、 否かのパラメータです。これを有効( TRUE )にすると日本語の入力をしようとしてもはじかれます。 有効にしない場合は FALSE にします。
 最後に NumCharOnlyFlag は半角の数字文字のみを入力できるようにするか、 を指定するパラメータです。これを TRUE にすることによって半角の 0 から 9 までの文字しか入力できなくなります。 16進数でいえば a から f もあるのですがDXライブラリでは16進数は対応していません。無効にする場合は FALSE です。
 このように指定して関数を呼ぶとキー入力ハンドルの作成に成功すれば戻り値としてハンドルとなる int 型の数値が得られます。以降この数値はキー入力終了時まで必要となるので保存しておきます。

サンプル

KeyInputString と同じことをキー入力ハンドルを使用して実現します。
Windows用
#include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char String[ 256 ] ; int InputHandle ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1 ; // 描画先を裏にする SetDrawScreen( DX_SCREEN_BACK ) ; // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし) InputHandle = MakeKeyInput( 50 , FALSE , FALSE , FALSE ) ; // 作成したキー入力ハンドルをアクティブにする SetActiveKeyInput( InputHandle ) ; // キー入力終了待ちループ // (ProcessMessageをループごとに行う) while( !ProcessMessage() ) { // 入力が終了している場合は終了 if( CheckKeyInput( InputHandle ) != 0 ) break ; // 画面の初期化 ClearDrawScreen() ; // 入力モードを描画 DrawKeyInputModeString( 640 , 480 ) ; // 入力途中の文字列を描画 DrawKeyInputString( 0 , 0 , InputHandle ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; } // 入力された文字列を取得 GetKeyInputString( String , InputHandle ) ; // 用済みのインプットハンドルを削除する DeleteKeyInput( InputHandle ) ; // 画面の初期化 ClearDrawScreen() ; // 入力された文字列を画面に表示する DrawString( 0 , 0 , "あなたが入力した文字列は" , GetColor( 255 , 255 , 255 ) ) ; DrawString( 0 , 16 , String , GetColor( 255 , 255 , 255 ) ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; // キー入力待ち WaitKey() ; // DXライブラリの使用終了 DxLib_End() ; // 終了 return 0 ; }




宣言int DeleteKeyInput( int InputHandle ) ;

概略キー入力データの削除

引数int InputHandle : 削除するキー入力ハンドル
戻り値 0:成功
 −1:エラー発生

解説  MakeKeyInput 関数で作成したキー入力ハンドルを削除します。
 以降削除したキー入力ハンドルは無効となります。

サンプル

MakeKeyInput 関数のサンプルを参考にして下さい



宣言int InitKeyInput( void ) ;

概略すべてのキー入力データの削除

引数なし
戻り値 0:成功
 −1:エラー発生

解説  MakeKeyInput 関数で作成したキー入力ハンドルをすべて削除します。

サンプル

 ありません。



宣言int SetActiveKeyInput( int InputHandle ) ;

概略指定のキー入力をアクティブにする

引数int InputHandle : アクティブにするキー入力ハンドル
戻り値 0:成功
 −1:エラー発生

解説  指定した MakeKeyInput で作成したキー入力ハンドルをアクティブにします。 アクティブになったキー入力ハンドルは以降キーボードの入力データを受けることになります。
 アクティブにすることの出来るキー入力ハンドルは常に一つで、 指定のキー入力ハンドルをアクティブにする以前にアクティブになっていたキー入力ハンドルは非アクティブになります。
 これは当然ですが一度に複数のキー入力先に入力が出来ても意味がないからです。

 なお、キー入力が終了しているキー入力ハンドルを指定すると終了状態が初期化され、再び入力出来るようにすることが出来ます。

サンプル

MakeKeyInput 関数のサンプルを参照して下さい。



宣言int CheckKeyInput( int InputHandle ) ;

概略入力が終了しているか取得する

引数int InputHandle : キー入力ハンドル
戻り値0 :キー入力はまだ完了もキャンセルもされていない
 1 :キー入力は正常に終了した
 2 :キー入力はキャンセルされた
 −1:エラー発生

解説  MakeKeyInput で作成したキー入力が終了したか、 キャンセルされたかまだ入力中か、の情報を得ます。戻り値による状態は上記の通りです。

サンプル

MakeKeyInput 関数のサンプルを参照して下さい



宣言int DrawKeyInputString( int x , int y , int InputHandle ) ;

概略キー入力中データの描画

引数 int x , y : 入力中の文字列を描画する座標
int InputHandle : 入力中文字列を描画したいキー入力のハンドル
戻り値 0:成功
 −1:エラー発生

解説  MakeKeyInput で作成したキー入力の途中経過を画面に描画する際に使用します。 この関数は描画する文字列が画面端までいってしまった場合自動的に改行されますので、 SetDrawArea 関数で描画可能領域を変更することによって好きな領域に文字列を収めることが出来ます。

サンプル

MakeKeyInput 関数のサンプルを参照して下さい



宣言int DrawKeyInputModeString( int x , int y ) ;

概略入力モード文字列を描画する

引数int x , y : 入力モードを描画する座標
戻り値 0:成功
 −1:エラー発生

解説  キーボード入力の入力モード文字列を描画します。入力モード文字列とは『ひらがな』や『全角英数』とうです。 IMEを使用していない場合はなにも描画されません。

サンプル

 MakeKeyInput 関数のサンプルを参考にして下さい



宣言int SetKeyInputString( char *String , int InputHandle ) ;

概略キー入力データに指定の文字列をセットする

引数 char *String : セットする文字列があるアドレス
int InputHandle : セットするキー入力のハンドル
戻り値 0:成功
 −1:エラー発生

解説  MakeKeyInput 関数で作成したキー入力の入力中文字列を String で指定するアドレスにある文字列に置き換えます。
試しに MakeKeyInput 関数のサンプル

// 作成したキー入力ハンドルをアクティブにする SetActiveKeyInput( InputHandle ) ; // キー入力終了待ちループ // (ProcessMessageをループごとに行う) while( !ProcessMessage() )

の部分を

// 作成したキー入力ハンドルをアクティブにする SetActiveKeyInput( InputHandle ) ; SetKeyInputString( "ここに文章を入力してください" , InputHandle ) ; // キー入力終了待ちループ // (ProcessMessageをループごとに行う) while( !ProcessMessage() )

に変更してみてください

サンプル

 特に有りません



宣言int SetKeyInputNumber( int Number , int InputHandle ) ;

概略キー入力データに指定の数値を文字に置き換えてセットする

引数 int Number : セットする数字となる数値
int InputHandle : 数字をセットするキー入力のハンドル
戻り値 0:成功
 −1:エラー発生

解説  SetKeyInputString の数字バージョンです。 Number に希望の数値を入れると、 自動的に文字に変換され入力中の文字列と置き替わります。
試しに MakeKeyInput 関数のサンプル

// 作成したキー入力ハンドルをアクティブにする SetActiveKeyInput( InputHandle ) ; // キー入力終了待ちループ // (ProcessMessageをループごとに行う) while( !ProcessMessage() )

の部分を

// 作成したキー入力ハンドルをアクティブにする SetActiveKeyInput( InputHandle ) ; SetKeyInputNumber( 1234568 ,InputHandle ) ; // キー入力終了待ちループ // (ProcessMessageをループごとに行う) while( !ProcessMessage() )

に変更してみてください

サンプル

 特に有りません



宣言int GetKeyInputString( char *StrBuffer , int InputHandle ) ;

概略入力データの文字列を取得する

引数 char *StrBuffer : 文字列を格納するバッファのアドレス
int InputHandle : 入力データ文字列が欲しいキー入力のハンドル
戻り値 0:成功
 −1:エラー発生

解説  キー入力中、又は終了したキー入力文字列を取得するための関数です。
 キー入力がされた結果はこの関数を持って得ることが出来ます。

サンプル

 MakeKeyInput のサンプルを参考にして下さい



宣言int GetKeyInputNumber( int InputHandle ) ;

概略入力データの文字列を数値として取得する

引数int InputHandle : 数値を得たいキー入力のハンドル
戻り値 入力された文字列を数値に変換したもの。
 (故にエラーが発生したかどうかを判断する術はありません)

解説  入力中、または入力が終了したキー入力文字列を数値に変換して得ます。 入力された文字列の中に数字以外のものが含まれていると必ず0が返されます。
 のでこの関数を使用するキー入力は MakeKeyInput でキー入力ハンドルを作成する際に NumCharOnlyFlag を TRUE にして有効にしておくことを推奨します。

サンプル

 特に有りません





戻る