ページ 11

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

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

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

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

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

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

Posted: 2013年11月05日(火) 00:06
by みけCAT
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箇所の情報を互いに補い合って使用するといい感じになります)

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

Posted: 2013年11月05日(火) 20:15
by ココ
お陰様でキー入力に関して解決しました。
大変助かりました!
有難う御座います。