[1] 質問文
[1.1] 自分が今行いたい事は何か
日本語の全角文字入力時に1文字ずつ表示させること。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
inputHandleを宣言し、GetKeyInputStringでchar型配列に格納。
格納したデータをstring型のcharactorNameに代入する。
代入した文字列をDrawStringToHandleで表示。
#pragma once
#include <string>
using namespace std;
// Load.h
class Load
{
private:
int inputHandle;
char nameBuf[16];
string charactorName;
bool nameFlag;
int white;
int bodyHandle;
public:
Load::Load();
Load::~Load() {}
void initialize();
void update();
void draw();
};
// Load.cpp
#include "Load.h"
#include "DxLib.h"
#include <string>
#include <fstream>
using namespace std;
Load::Load()
: inputHandle(MakeKeyInput(15, FALSE, FALSE, FALSE))
, nameFlag(FALSE)
, white(GetColor(255, 255, 255))
, bodyHandle(CreateFontToHandle("メイリオ", 20, -1))
{
charactorName.clear();
}
void Load::initialize()
{
SetActiveKeyInput( inputHandle );
}
void Load::update()
{
if (nameFlag == FALSE)
{
GetKeyInputString(nameBuf, inputHandle);
charactorName = string(nameBuf);
if (CheckKeyInput( inputHandle ) != 0)
{
nameFlag = TRUE;
DeleteKeyInput( inputHandle );
}
}
else
{
// 全角テキスト入力後の処理
}
}
void Load::draw()
{
if (nameFlag == FALSE)
{
DrawStringToHandle(80, 380, "↓Please tell me your name, sir.", white, bodyHandle);
DrawStringToHandle(80, 410, charactorName.c_str(), white, bodyHandle);
}
else
{
// 全角テキスト入力後の描画処理
}
}
//Main.cpp
#include "DxLib.h"
#include "Load.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
Load L;
L.initialize();
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() ==0)
{
L.update();
L.draw();
if (CheckHitKey( KEY_INPUT_ESCAPE ) != 0) break;
}
DxLib_End();
return 0;
}
半角入力だと問題ないが、全角入力にすると一度Enterキーを入力しないと文字が表示されない。
1文字ずつ表示するためには1文字ごとにEnterキーを入力しなければならず、
誤って2回入力してしまうと誤ったテキスト入力になってしまう。
[1.4] 今何がわからないのか、知りたいのか
これが改善可能なのか否か。
もし、改善不可能な仕様であるならば、他の手段を知りたい。
[2] 環境
[2.1] OS : Windows, Linux等々
>>> OS : Windows10
[2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
>>> コンパイラ名(?) : Visual Studio 2017
[3] その他
・どの程度C言語を理解しているか
>>> 初歩の初歩程度ならば理解している。
・ライブラリを使っている場合は何を使っているか
>>> Dxライブラリ
長文、乱文で申し訳ないです。
私自身で見直しはしましたが、伝わりにくいところがあると思うので
そこは聞いていただけるとありがたいです。
なにとぞ、よろしくお願いします。