DxLibの内部にキーに対応した文字列を取得する機能は無いので、自前で文字列を用意する必要があります。
となると、キーのIDから対応する文字列を導く式が無い限り、switch文を使ったような総当り的なやり方に
なるのは致し方ないのではないかと思います。
せっかくなので、私は配列を使ってやってみました。
//-- 以下ソース --//
// KEY ID:0に未定義のキーコードを割り当てていますが、もしかしたら問題あるかもしれません。
// JOYPADには対応していません
#include "DxLib.h"
class KEY_STRING {
const static int key_max = 256;
const static int KEY_INPUT_UNKNOWN = 0;
const char* name[key_max];
KEY_STRING( KEY_STRING& copy ){ };
public:
KEY_STRING( void );
~KEY_STRING( void ) {};
const char* operator ()( int id ) const {
if ( id < 0 || key_max <= id )
id = KEY_INPUT_UNKNOWN;
if ( !name[id] )
id = KEY_INPUT_UNKNOWN;
return name[id];
}
};
KEY_STRING::KEY_STRING( void )
{
memset( name, 0, sizeof(const char*) * key_max );
name[KEY_INPUT_UNKNOWN] = "未定義キー";
name[KEY_INPUT_BACK] = "バックスペースキー";
name[KEY_INPUT_TAB] = "タブキー";
name[KEY_INPUT_RETURN] = "エンターキー";
// 以下にキーと文字列の対応を羅列
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode( TRUE );
if ( DxLib_Init( ) == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK );
char key_state[256];
KEY_STRING KeyId2Str;
while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
ClearDrawScreen( );
GetHitKeyStateAll( key_state );
for ( int i = 0, y = 0; i < 256; i++ ) {
if ( key_state[i] )
DrawString( 0, 20 * y++, KeyId2Str( i ), GetColor( 255, 255, 255 ) );
}
ScreenFlip( );
}
DxLib_End( );
return 0;
}