入力関係の関数
|
ジョイパッド入力関連関数
|
宣言 | 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キー)が押されるまで待つ
#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 ; // ソフトの終了
}
|
宣言 | 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 の値が常に格納されると思われます。
|
|
サンプル
ジョイパッドのアナログ的入力状態を画面に表示します。
#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 ; // ソフトの終了
}
|
宣言 | 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 から取得できる情報を画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
DINPUT_JOYSTATE input ;
int i ;
int Color ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// 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;
}
|
宣言 | 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 (10) // Aボタン
#define XINPUT_BUTTON_B (11) // Bボタン
#define XINPUT_BUTTON_X (12) // Xボタン
#define XINPUT_BUTTON_Y (13) // Yボタン
Xbox360コントローラに限定されているので DirectInput の情報よりシンプルです。
そして左右スティックも左右トリガーも専用のメンバー変数が割り当てられています。
このように XInput を使用することで問題なく状態が取得できる左右トリガーですが、
DirectInput では左トリガーも右トリガーも構造体 DINPUT_JOYSTATE のメンバー変数 Z に割り当てられています。
どういうことかと言いますと、左トリガーを押し込んだときは Z の値がプラス方向に変化して、
右トリガーを押し込んだときは Z の値がマイナス方向に変化するというものです。
つまり、左右のトリガーを同時に押し込んだときは Z の値は 0 になり、即ち何もトリガーを押していないときと変わらず、押しているかどうかを判断することができません。
何故そんな仕様にしたのかは不明ですが、それに対応するために正常な入力情報を取得するための関数 GetJoypadXInputState があります。
尚、GetJoypadXInputState は Xbox360コントローラが接続されている場合のみ使用可能な関数で、
Xbox360コントローラ以外のゲームパッドが接続されていてもエラーとなり、戻り値は -1 になりますのでご注意ください。
|
|
サンプル
XInput から取得できる情報を画面に表示します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
XINPUT_STATE input ;
int i ;
int Color ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// 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 SetJoypadInputToKeyInput( int InputType, int PadInput, int KeyInput1, int KeyInput2, int KeyInput3, int KeyInput4 ) ;
|
概略 | ジョイパッドの入力に対応したキーボードの入力を設定する
|
引数 |
InputType : キーとの対応設定を変更するパッドの識別子
DX_INPUT_PAD1 : パッド1
DX_INPUT_PAD2 : パッド2
DX_INPUT_PAD3 : パッド3
DX_INPUT_PAD4 : パッド4
PadInput : 設定を変更するパッドのボタン( PAD_INPUT_1 等 )
KeyInput1 : 対応させるキーその1( KEY_INPUT_Z 等 )
KeyInput2 : 対応させるキーその2( 無用な場合は -1 を渡してください )
KeyInput3 : 対応させるキーその3( 無用な場合は -1 を渡してください )
KeyInput4 : 対応させるキーその4( 無用な場合は -1 を渡してください )
|
戻り値 | 0:成功 |
| −1:エラー発生
|
解説 |
GetJoypadInputState は例えば
GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
を実行した場合、キーの入力もパッドの入力として取得することができますが、
DX_INPUT_KEY_PAD1 を渡した際のキーとパッドの入力の対応は、パッドの1ボタン=Zキー、2ボタン=Xキー・・・となっています。
10年以上前のPCゲームからZキーが決定や攻撃ボタンとして使われてはいますが、ときにこの設定を変更したくなることがあると思います。
また、パッド2や3に対応するキーを設定したくなることもあると思います。
そんなときに使用するのがこの関数です。
この関数ではパッドの入力に対応したキーボード側の入力を設定することができます。
例えばキーボードのGキーを押したときにパッド1のAボタンが押されたことにしたいときは
SetJoypadInputStateToKeyInput( DX_INPUT_PAD1, PAD_INPUT_1, KEY_INPUT_G, -1, -1, -1 ) ;
を実行します。これを実行した後は、
GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
としたときに、Gキーが押されていれば、PAD_INPUT_1 が返ってくるようになります。
ではパッド2以降は設定した後 GetJoypadInputState に何を渡せば良いんだ?という話ですが、
こちらは
GetJoypadInputState( DX_INPUT_PAD2 | DX_INPUT_KEY ) ;
という風に、渡す引数に DX_INPUT_KEY を論理和させて下さい。
( パッド1も GetJoypadInputState( DX_INPUT_PAD1 | DX_INPUT_KEY ) ; でもOKです )
なお、対応するキーの設定を4つもできるようにしているのは、
方向ボタンのように十字キーとテンキーどちらでも入力を対応させたいようなケースを考えてのことですので、
殆どの場合は KeyInput2 以降の3つの引数は -1 になると思います。
|
|
サンプル
パッド1の十字ボタンに対応したキーをIキー(上)、Kキー(下)、Jキー(左)、Lキー(右)にします
その後I,K,J,Lキーでボックスを操作できるようになります
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int x, y, input ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return 0;
// パッド1の十字ボタンの対応を変更
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_UP, KEY_INPUT_I, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_DOWN, KEY_INPUT_K, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_LEFT, KEY_INPUT_J, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_RIGHT, KEY_INPUT_L, -1, -1, -1 );
// 描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK );
// ボックスの初期座標をセット
x = 320 ;
y = 240 ;
// ESCキーが押されるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// パッド1の入力を取得
input = GetJoypadInputState( DX_INPUT_PAD1 | DX_INPUT_KEY ) ;
// 入力に応じてボックスの位置を変更
if( input & PAD_INPUT_UP ) y -= 8 ;
if( input & PAD_INPUT_DOWN ) y += 8 ;
if( input & PAD_INPUT_LEFT ) x -= 8 ;
if( input & PAD_INPUT_RIGHT ) x += 8 ;
// 画面を初期化
ClearDrawScreen();
// ボックスの描画
DrawBox( x, y, x + 32, y + 32, GetColor( 255,255,255 ), TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip();
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}
|
宣言 | 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秒間振動させます。
#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となっています)。
フルスクリーンモードでマウスを使用したプログラムを作成する場合、マウスカーソルが見えなくては話にならないのでこの関数で見えるようにします。
|
|
サンプル
マウスカーソルを表示状態にする
#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 ; // ソフトの終了
}
|
宣言 | int GetMousePoint( int *XBuf, int *YBuf );
|
概略 | マウスカーソルの位置を取得する
|
引数 |
XBuf ,YBuf : マウスカーソル現在地のX座標とY座標を保存する
int型変数のポインタ |
戻り値 | 0:成功 |
| −1:エラー発生
|
解説 |
マウスカーソルの画面上での座標をXBufとYBufの示すint型変数に格納します。
|
|
サンプル
マウスの座標を画面に表示する
#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 ; // ソフトの終了
}
|
宣言 | int SetMousePoint( int PointX , int PointY );
|
概略 | マウスカーソルの位置をセットする
|
引数 | PointX , PointY : 新しいマウスカーソルの位置 |
戻り値 | 0:成功 |
| −1:エラー発生
|
解説 |
マウスカーソルの位置を( PointX , PointY )の示す座標に移動します、
この関数を使うとマウスカーソルは強制的に指定の座標の移動する事になります。
|
|
サンプル
1秒経つごとにマウスカーソルが指定の座標に戻されてしまうプログラム
#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ボタン
|
|
サンプル
マウス右ボタンが押されるまで待つ
#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 ; // ソフトの終了
}
|
宣言 | int GetMouseInputLog( int *Button, int *ClickX, int *ClickY, int LogDelete ) ;
|
概略 | マウスのクリック履歴を取得する
|
引数 |
Button : クリックされたボタンの値( MOUSE_INPUT_LEFT など )を保存するint型変数のアドレス
ClickX, ClickY : クリックされた時のマウスカーソルのX座標とY座標を保存するint型変数のアドレス
LogDelete : ログの情報を削除するかどうかのフラグ( TRUE:削除する FALSE:削除しない )
|
戻り値 |
0:クリック情報を取得した
|
| −1:クリック情報は無かった
|
解説 |
マウスのボタンがクリックされたときの情報( クリックされたボタン、クリックされたときの座標 )を取得します。
前回・若しくはソフト起動から始めての GetMouseInputLog 呼び出しまでの間にマウスのボタンがクリックされていなかった場合は −1が返り、
その場合は Button、 ClickX、 ClickY で渡す変数のアドレスにも何も値を代入しません。
前回・若しくはソフト起動から始めての GetMouseInputLog 呼び出しまでの間にマウスのボタンがクリックされていた場合は 0が返り、
クリックされたボタン( MOUSE_INPUT_LEFT 等、ボタンについて詳しくは GetMouseInput の解説を参照してください )が Button に、
クリックされたときのマウスカーソルの座標が ClickX、 ClickY に代入されます。
一見 GetMousePoint と GetMouseInput の組み合わせがあればこの関数は必要が無い気がしますが、
この関数は
1.クリックされた瞬間の座標を取得できる
2.クリックされた情報が蓄積されている
の2点があるので、GetMousePoint と GetMouseInput の組み合わせでは代用できない関数となっています。
まず、GetMousePoint と GetMouseInput を組み合わせたクリック検知とクリック座標取得の問題として
・クリックの取りこぼしが発生する
プログラムの処理負荷が高く十分なフレームレート( 画面の更新頻度 )を確保できない場合は
プログラムが GetMouseInput で入力状態を調べる間隔が長くなるため、GetMouseInput で入力状態を
調べる間隔より短い時間でプレイヤーがマウスのボタンを押して離すとプログラムはプレイヤーが
マウスのボタンを押したことを検知することができない。
・クリック座標のズレが発生する
同じく処理負荷が高く十分なフレームレートを確保できない場合、GetMouseInput によりマウスの
クリックを検出した後 GetMousePoint でマウスカーソルの座標を取得すると、実際にプレイヤーが
クリックした座標からズレが発生することがあります。( 低いフレームレートでのマウスクリック
検出の間にマウスカーソルが移動してしまっている場合があるので )
の二つがあります。
対して、GetMouseInputLog では『クリックの取りこぼしが発生する』に対しては『クリックされた情報が蓄積される』ので取りこぼしの心配が無く、
『クリック座標のズレが発生する』に対しては『クリックされた瞬間の座標が取得できる』ので、
主にフレームレートが低い場合に発生するマウスクリックの問題を解決することができます。
蓄積されたクリック情報を取得する方法は『戻り値が−1になるまで何度もこの関数を呼ぶ』となります。
この関数の戻り値が0だった場合は蓄積されたクリック情報がまだある可能性がありますので、
戻り値が−1( クリック情報が無かった )になるまで繰り返し GetMouseInputLog を呼ぶというわけです。
尚、第4引数の LogDelete を FALSE にした場合は蓄積されたクリック情報を削除しないので、
LogDelete を FALSE にして呼ぶと、何度も同じクリック情報が返ってきます、
なので LogDelete はクリック情報を削除したくない場合を除いて TRUE を渡すようにしてください。
|
|
サンプル
0.5秒毎に左クリックされたかどうかを調べて、クリックされた座標に四角形を描画します。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ClickX, ClickY, Button ;
int DrawFlag, DrawX, DrawY ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 描画情報の初期化
DrawFlag = FALSE ;
DrawX = 0 ;
DrawY = 0 ;
// メインループ(何かキーが押されたらループを抜ける)
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// クリック情報を取得する
if( GetMouseInputLog( &Button, &ClickX, &ClickY, TRUE ) == 0 )
{
// 左ボタンがクリックされていたら描画するかどうかのフラグを立てて、座標も保存する
if( ( Button & MOUSE_INPUT_LEFT ) != 0 )
{
DrawFlag = TRUE ;
DrawX = ClickX ;
DrawY = ClickY ;
}
}
// 描画するかどうかのフラグが立っていたら、クリックした座標に小さい四角形を描画する
if( DrawFlag == TRUE )
{
DrawBox( DrawX - 8, DrawY - 8, DrawX + 8, DrawY + 8, GetColor( 255,255,255 ), TRUE ) ;
}
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// 0.5秒待つ
WaitTimer( 500 ) ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
|
宣言 | int GetMouseWheelRotVol( void ) ;
|
概略 | マウスホイールの回転量を得る
|
引数 | なし |
戻り値 | マウスの入力状態値
|
解説 |
前回この関数が呼ばれてから今回この関数が呼ばれるまでにマウスホイールが回転した量を得ます。
手前に回した分はマイナスの値として、奥に回した分はプラスの値として返ってきます。
|
|
サンプル
何かキーが押されるまで回転量の合計を画面に表示し続けます。
#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 ; // ソフトの終了
}
|
キーボード入力関連関数
|
宣言 | int CheckHitKeyAll( void ) ;
|
概略 | すべてのキーの押下状態を取得する(キーの特定はできない)
|
引数 | なし |
戻り値 | 0:成功 |
| −1:エラー発生
|
解説 |
すべてのキーのどれかが押されているか判定し、結果を返します
この関数で特定のキーを判定する事は出来ません。特定のキー入力を判定するには次のCheckHitKey関数を使用してください。
|
|
サンプル
キー入力があるまで待つ
#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 ; // ソフトの終了
}
|
宣言 | 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キーが押されるまで待つ
#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 ; // ソフトの終了
}
|
宣言 | 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 関数でも同じことは出来ます。
#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 ;
}
|
半角文字入力関連関数
|
宣言 |
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が返されます。
|
|
サンプル
画面中央に入力された文字を随時表示します
#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になります。
|
|
サンプル
名前を聞いてくるので名前を入力します。その後それを表示するだけのプログラムです。
#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:エラー発生
|
解説 |
KeyInpurString の半角文字列のみを入力できるようにしたものです。
漢字やひらがななどの2バイト文字は入力することが出来ません。
その他の動作は KeyInputString と同じものです。
|
|
サンプル
名前を英字で入力するよう聞いてきます。入力後、それを画面に表示します。
#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 を起点とした領域に描画されます。
この関数のみ入力した数値が直接返ってきます。
|
|
サンプル
描画する線の長さを入力し、その後その長さの線を描画します。
#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 と同じことをキー入力ハンドルを使用して実現します。
#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 にして有効にしておくことを推奨します。
|
|
サンプル
特に有りません
|
戻る
|