ページ 11

DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:00
by BL2
DXライブラリにてテキストボックスのようなものを作り、テキストを入力したいのですが、
InputKeyStringでは入力中に画像などが表示されなくなるので、
MakeKeyInputを使うことにしました。
しかし入力しても文字がうまく表示されません。なにがいけないのでしょうか?

コード:

// *************メインループ内*********************************************
int Handle= MakeKeyInput(80, FALSE, FALSE, FALSE);		// 全角文字入力ハンドル

// ボックスの描画
int Black = GetColor(0, 0, 0);
int White = GetColor(255, 255, 255);
DrawBox(249, 98, 701, 118, RM_Black, FALSE);
DrawBox(250, 99, 700, 117, RM_White, TRUE);

// テキストボックスの動作
int posX, posY;   // マウスポインタの座標格納
GetMousePoint(&RM_posX, &RM_posY);
if(posX >= 250 && posX <= 700 && posY >= 99 && posY <= 117){   // ボックスの上で
	if((GetMouseInput() & MOUSE_INPUT_LEFT)){   // クリックすると
		SetActiveKeyInput(Handle);   // 入力ハンドルをアクティブに
		DrawKeyInputString(0, 100, TxtBox_Zen);   // 入力途中の文字列を描画
	}
}

// *************以下略******************************************************
初心者ですのでおかしい点などの指摘お願いします。

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:01
by BL2
16行目TxtBox_ZenはHandleの間違いです

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:05
by h2so5
このコードがすべてメインループ内にあるということは、
MakeKeyInputが毎フレーム呼ばれて初期化されてしまっているのではないでしょうか。

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:05
by BL2
すみません16行目
DrawKeyInputString(250, 100, Handle);でした。
ためしに値変えてみたままになってました。

文字が全く表示されません。なぜでしょうか?

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:07
by BL2
h2so5 さんが書きました:このコードがすべてメインループ内にあるということは、
MakeKeyInputが毎フレーム呼ばれて初期化されてしまっているのではないでしょうか。
MakeKeyInputの部分だけをメインループから外してみたんですがダメでした。

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:13
by h2so5
BL2 さんが書きました: MakeKeyInputの部分だけをメインループから外してみたんですがダメでした。
外したコードがどうなっているのか具体的に書いてください。

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:28
by BL2

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
	ChangeWindowMode(TRUE), SetGraphMode(800, 600, 32),SetBackgroundColor(80, 180 ,0);   //ウインドウの設定
	SetOutApplicationLogValidFlag(FALSE);   // ログ出力を行わない
	if(DxLib_Init() == -1) return -1;   //初期化、エラー発生で強制終了
	SetDrawScreen(DX_SCREEN_BACK);      //描画先を裏画面に設定
	SetChangeScreenModeGraphicsSystemResetFlag(FALSE);   //グラフィックハンドルのリセット防止
	SetMouseDispFlag(TRUE);   // マウスポインタを表示

	int Handle= MakeKeyInput(80, FALSE, FALSE, FALSE);      // 全角文字入力ハンドル

	while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0){

		// ボックスの描画
		int Black = GetColor(0, 0, 0);
		int White = GetColor(255, 255, 255);
		DrawBox(249, 98, 701, 118, Black, FALSE);
		DrawBox(250, 99, 700, 117, White, TRUE);
 
		// テキストボックスの動作
		int posX, posY;   // マウスポインタの座標格納
		GetMousePoint(&posX, &posY);
		if(posX >= 250 && posX <= 700 && posY >= 99 && posY <= 117){   // ボックスの上で
			if((GetMouseInput() & MOUSE_INPUT_LEFT)){   // クリックすると
				SetActiveKeyInput(Handle);   // 入力ハンドルをアクティブに
				DrawKeyInputString(250, 100, Handle);   // 入力途中の文字列を描画
			}
		}
										
	}

	DxLib_End();   //DXライブラリ終了処理
	return 0;
}
こんなかんじです

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:41
by h2so5
試してみましたけど、表示されますよ。
マウスボタンを押している間だけですけど。

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:42
by BL2
h2so5 さんが書きました:試してみましたけど、表示されますよ。
マウスボタンを押している間だけですけど。
ああああああ!
なるほど、そういうことですか
ありがとうございます。全然気づきませんでしたw

Re: DXライブラリのテキスト入力

Posted: 2013年2月09日(土) 15:43
by BL2
修正します。
ありがとうございました。