はじめまして。
GetHitKeyStateAllとMakeKeyInput系の併用時の挙動について教えてください。
新・ゲームプログラミングの館様の
「全てのキーの入力状態を見て、押されているキーコードのキーフレーム数を加算」
(dixq.net/g/02_09.html)のコードを使用し、以下のようにプログラムを組んだのですが、
入力中(何か文字を入れた直後)から、tmpKeyの112番目と148番目のキーが押しっぱなしになってしまいます。
キーが入力されたらSetMouseDispFlagをfalseに、マウスが動いたらtrueになるようにしたいので、困っております。
何か解決方法はございますでしょうか。
よろしくお願いいたします。(以下コード)
#include "DxLib.h"
typedef struct
{
	int	x;
	int	y;
}POS;
POS Mouse;						//	マウスの座標
POS oldMouse;					//	前フレームのマウスの座標
int key[256];					//	キーの入力状況
int UpdateKey() {
	char tmpKey[256]; // 現在のキーの入力状態を格納する
	GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
	for (int i = 0; i<256; i++) {
		if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
			key[i]++;     // 加算
			SetMouseDispFlag(false);
		}
		else {              // 押されていなければ
			key[i] = 0;   // 0にする
		}
	}
	return 0;
}
void MouseCheck()
{
	oldMouse = Mouse;	//	前フレームのマウス座標を保存
	GetMousePoint(&Mouse.x, &Mouse.y);	//	マウス座標を取得
	if (oldMouse.x != Mouse.x || oldMouse.y != Mouse.y)	//	異なっていたら
	{
		SetMouseDispFlag(true);	//	カーソルを表示する
	}
}
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	/* ---------------------------------------------
	*
	*	起動設定
	*
	* -----------------------------------------------*/
	ChangeWindowMode(TRUE); // ウィンドウモードに設定
	SetGraphMode(800, 600, 32);	//	画面モード設定
	if (DxLib_Init() == -1)		// DXライブラリ初期化処理
	{
		return -1;			// エラーが起きたら直ちに終了
	}
	SetDrawScreen(DX_SCREEN_BACK); //描画先を裏画面に設定
	/* ---------------------------------------------
	*
	*	メインループ
	*
	* -----------------------------------------------*/
	char String[256];
	int InputHandle;
	// キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし)
	InputHandle = MakeKeyInput(50, FALSE, FALSE, FALSE);
	// 作成したキー入力ハンドルをアクティブにする
	SetActiveKeyInput(InputHandle);
	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && UpdateKey() == 0)	//裏画面を表画面に反映, メッセージ処理, 画面クリア,キー入力状況
	{
		//	マウスが動いたかどうか
		MouseCheck();
		if (CheckKeyInput(InputHandle) != 0)
		{
			//	入力が終わったら
			// 入力された文字列を取得
			GetKeyInputString(String, InputHandle);
			// 用済みのインプットハンドルを削除する
			DeleteKeyInput(InputHandle);
			break;
		}
		else
		{
			// 入力途中の文字列を描画
			DrawKeyInputString(0, 0, InputHandle);
		}
	}
	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && UpdateKey() == 0)	//裏画面を表画面に反映, メッセージ処理, 画面クリア,キー入力状況
	{
		//	マウスが動いたかどうか
		MouseCheck();
		DrawString(0, 0, "あなたが入力した文字列は", GetColor(255, 255, 255));
		DrawString(0, 16, String, GetColor(255, 255, 255));
	}
	DxLib_End();				// DXライブラリ使用の終了処理
	return 0;				// ソフトの終了 
}