DXライブラリにおける半角/全角キー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ココ

DXライブラリにおける半角/全角キー

#1

投稿記事 by ココ » 12年前

DXライブラリとC言語を用いてゲーム開発をしております。
この度日本語入力機能が必要となり、KeyInputString()を使ってみたのですが画面切替となってしまい使い辛かったので困っておりました。

希望としてはGoogle検索の様に入力途中の文字に応じて予測変換リストを表示させたいと思っております。

この処理はMakeKeyInput()関連の関数を用いれば可能でしょうか?
今いち使い方が分かりませんでした・・・。

不可能の場合、自分で一から日本語入力処理を組もうと思っていたのですが、CheckHitKey()において
半角/全角キー はどれに当たるのでしょうか?
見当たらなかったため質問させて頂きました。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: DXライブラリにおける半角/全角キー

#2

投稿記事 by みけCAT » 12年前

GetHitKeyStateAllで半角/全角キーは取得できないようなので、多分CheckHitKeyでも取得できないと思います。

Windows APIのGetAsyncKeyStateを使用してみてはいかがですか?
この場合、半角/全角キーを押すごとに「0xF3が押されている状態」と「0xF4が押されている状態」が切り替わるようです。

検証用コード
白文字がGetHitKeyStateAllのキーコード、赤文字がGetAsyncKeyStateのキーコードを表し、押されているキーに対応する数字が出ます。
数字は10進数です。

コード:

#include "DxLib.h"

char Key[256];

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
	SetDrawScreen( DX_SCREEN_BACK );        //裏画面に設定

	while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
		//↑メッセージ処理         ↑画面をクリア          ↑キーボード入力状態取得       ↑ESCが押されていない

		//ココに処理を書いていく
		for(int i=0;i<256;i++) {
			if(Key[i])DrawFormatString((i%16)*40,(i/16)*30,GetColor(255,255,255),"%d",i);
			if(GetAsyncKeyState(i) & 0x8000)
				DrawFormatString((i%16)*40+20,(i/16)*30,GetColor(255,0,0),"%d",i);
		}

		ScreenFlip();//裏画面を表画面に反映
	}

	DxLib_End();
	return 0;
}
GetAsyncKeyState関数のキーコードの一覧はここにあります。
http://chokuto.ifdef.jp/urawaza/prm/vir ... _code.html
http://homepage3.nifty.com/ic/help/rmfunc/vkey.htm
(2箇所の情報を互いに補い合って使用するといい感じになります)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ココ

Re: DXライブラリにおける半角/全角キー

#3

投稿記事 by ココ » 12年前

お陰様でキー入力に関して解決しました。
大変助かりました!
有難う御座います。

閉鎖

“C言語何でも質問掲示板” へ戻る