今、c言語の勉強として簡単な電卓を作っているのですが、DXライブラリーのGetHitKeyStateAll関数について質問があります。
GetHitKeyStateAll関数は、一瞬しか入力を受け付けてくれないのでしょうか。
それとも、WaitKey関数のように何らかのキーが入力されるまで、入力を受け付けてくれるのでしょうか。
初心者なのでコードが汚く、必要ない処理をしているところがあるかもしれませんので、そんなところも教えてください。
コメントアウトした部分が問題だと思う部分です。
コメントアウトした部分は [第一引数の入力 --> 符号の入力 --> 第二引数の入力 --> 計算] という処理になるはずです。
#include "DxLib.h"
#include "main.h"
int calc_handle;
int clear_handle;
int button_handle[10];
int sign_handle[4];
//画像ハンドル
Point2D button[11];
//ボタンの座標
Sign sign;
//符号の座標
int input[2];
//入力値
Point2D clear;
//AC座標
int input_sign;
//符号チェック
int output;
//入力キーバッファ
char keybuf[ 256 ];
int LoadFiles(){
calc_handle = LoadGraph( "media\\calc.bmp" );
clear_handle = LoadGraph( "media\\clear.bmp" );
if( LoadDivGraph( "media\\button.bmp" , 10, 10, 1, 90, 40, button_handle ) == -1 ) return -1;
if( LoadDivGraph( "media\\sign.bmp" , 4, 4, 1, 60, 40, sign_handle ) == -1 ) return -1;
button[0].x = 275;
button[0].y = 360;
button[1].x = 145;
button[1].y = 310;
button[4].x = 145;
button[4].y = 260;
button[7].x = 145;
button[7].y = 210;
sign.plus.x = 145;
sign.plus.y = 155;
sign.minus.x = 240;
sign.minus.y = 155;
sign.multiplication.x = 335;
sign.multiplication.y = 155;
sign.divide.x = 430;
sign.divide.y = 155;
clear.x = 145;
clear.y = 105;
for( int i=2; i<4; i++ ){
button[i].x = button[1].x + (i - 1) * 40 + 90 * (i - 1);
button[i].y = button[1].y;
}
for( int j=5; j<7; j++ ){
button[j].x = button[4].x + (j - 4) * 40 + 90 * (j - 4);
button[j].y = button[4].y;
}
for( int k=8; k<10; k++ ){
button[k].x = button[7].x + (k - 7) * 40 + 90 * (k - 7);
button[k].y = button[7].y;
}
for( int i=2; i<4; i++ ){
button[i].x = button[1].x + (i - 1) * 40 + 90 * (i - 1);
button[i].y = button[1].y;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC ){
SetMainWindowText( "電卓" );
ChangeWindowMode( TRUE );
if( DxLib_Init() == -1) return -1;
while ( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ){
if( LoadFiles() == -1 ) return -1;
DrawGraph( 125, 10, calc_handle , FALSE);
DrawGraph( sign.plus.x, sign.plus.y, sign_handle[0], FALSE);
DrawGraph( sign.minus.x, sign.minus.y, sign_handle[1], FALSE);
DrawGraph( sign.multiplication.x, sign.multiplication.y, sign_handle[2], FALSE);
DrawGraph( sign.divide.x, sign.divide.y, sign_handle[3], FALSE);
for ( int i=0; i<10; i++ ){
DrawGraph( button[i].x, button[i].y, button_handle[i], FALSE);
}
DrawGraph( clear.x, clear.y, clear_handle, TRUE );
SetFontSize( 60 );
/* input[0] = KeyInputNumber( 165, 40, 1000000000, 0, FALSE );
while ( ProcessMessage() == 0 && keybuf[KEY_INPUT_ADD] == 1 || keybuf[KEY_INPUT_SUBTRACT] == 1 ||
keybuf[KEY_INPUT_MULTIPLY] == 1 || keybuf[KEY_INPUT_DIVIDE] == 1 ){
GetHitKeyStateAll ( keybuf );
}
if( keybuf[KEY_INPUT_ADD] == 1 || keybuf[KEY_INPUT_SUBTRACT] == 1 ||
keybuf[KEY_INPUT_MULTIPLY] == 1 || keybuf[KEY_INPUT_DIVIDE] == 1 ){
if( keybuf[KEY_INPUT_ADD] == 1 ) input_sign = 1;
if( keybuf[KEY_INPUT_SUBTRACT] == 1 ) input_sign = 2;
if( keybuf[KEY_INPUT_MULTIPLY] == 1 ) input_sign = 3;
if( keybuf[KEY_INPUT_DIVIDE] == 1 ) input_sign = 4;
}
input[1] = KeyInputNumber( 165, 40, 1000000000, 0, FALSE );
switch( input_sign ){
case 1:
output = input[0] + input[1];
break;
case 2:
output = input[0] - input[1];
break;
case 3:
output = input[0] * input[1];
break;
case 4:
output = input[0] / input[1];
break;
}
*/
DrawString( 100, 100, (const char *) output, GetColor( 255, 255, 255 ) );
WaitKey();
}
DxLib_End();
return 0;
}