質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

2031閲覧

glfw 日本語のテキスト入力を行いたい。

退会済みユーザー

退会済みユーザー

総合スコア0

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

標準入力

標準入力(stdin)は、プログラムが標準的に用いるデータ入力元。リダイレクトしない限り、プログラムを起動した端末のキーボードが標準入力になります。UNIX系OSやC言語に実装されて普及した概念ですが、他のOSや言語も含めた総称としても使われます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/06/21 06:29

アルファベットのテキスト入力は実現出来たのですが今度は日本語の文字入力を行いたいです。イベント入力の引数にunsigned int 型がありますがこれに入力した一文字が入りますがこの値をどうやって利用すればいいのでしょうか?参考サイトを見て文字コードについて調べましたがどうすればいいのかわかりません。

参考サイト: http://wisdom.sakura.ne.jp/programming/c/c63.html
イメージ説明

cpp

1 2// ##################################### イベント処理 テキスト入力 ##################################### 3void FrameWork::Window::KeyInputChar(GLFWwindow* win, unsigned int n) 4{ 5 Window* const instance = (Window*)glfwGetWindowUserPointer(win); 6 7 instance->inputKey = (char)n; 8} 9 10// ##################################### テキスト入力を取得 ##################################### 11std::vector<char> FrameWork::Window::getTextInput() 12{ 13 if (inputKey != 0) 14 { 15 if (string.size() == 0) 16 { 17 string.push_back(inputKey); 18 string.push_back('\0'); 19 } 20 else 21 { 22 string.erase(string.end() - 1); 23 string.push_back(inputKey); 24 string.push_back('\0'); 25 } 26 } 27 28 inputKey = 0; 29 return string; 30} 31

cpp

1 std::vector<char> string(0); 2 char str[1000] = { '\0' }; 3 4 while (*window) 5 { 6 window->FrameUpdate(glm::vec4(0.0f, 0.0f, 0.0f, 255.0f)); 7 8 9 string = window->getTextInput(); 10 FrameWork::DrawFormatString(glm::vec2(100,100),glm::vec4(0,255,0,255),40,string.data()); 11 12 13 14 15 window->ClearTextInput(); //テキスト入力をクリア 16 window->Wait(); //フレームレート制御 17 window->SwapBuffers(); //ダブルバッファリング 18 } 19 20

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/22 01:11

なんで、参考サイト見たのにキャストやstd::vectorがchar型なんでしょうか あと参考サイトみても文字コードについては調べられてませんよね?
guest

回答1

0

単純な方法としてchar型ではなく、wchar_t型を利用してみてください。
ただ、日本語のテキスト入力としてみた場合、複数文字の入力に対応できないため、その点では不十分です。

cpp

1// ##################################### イベント処理 テキスト入力 ##################################### 2void FrameWork::Window::KeyInputChar(GLFWwindow* win, unsigned int n) 3{ 4 Window* const instance = (Window*)glfwGetWindowUserPointer(win); 5 6 instance->inputKey = (wchar_t)n; 7} 8 9// ##################################### テキスト入力を取得 ##################################### 10std::vector<wchar_t> FrameWork::Window::getTextInput() 11{ 12 if (inputKey != 0) 13 { 14 if (string.size() == 0) 15 { 16 string.push_back(inputKey); 17 string.push_back('\0'); 18 } 19 else 20 { 21 string.erase(string.end() - 1); 22 string.push_back(inputKey); 23 string.push_back('\0'); 24 } 25 } 26 27 inputKey = 0; 28 return string; 29}

cpp

1 while (*window) 2 { 3 window->FrameUpdate(glm::vec4(0.0f, 0.0f, 0.0f, 255.0f)); 4 5 6 std::vector<wchar_t> string = window->getTextInput(); 7 // 「wchar_t*」非対応のためコメントアウト 8 //FrameWork::DrawFormatString(glm::vec2(100,100),glm::vec4(0,255,0,255),40,string.data()); 9 10 // 確認用の出力 11 wprintf(L"%s\n", string.data()); 12 13 14 15 window->ClearTextInput(); //テキスト入力をクリア 16 window->Wait(); //フレームレート制御 17 window->SwapBuffers(); //ダブルバッファリング 18 }

投稿2021/06/22 01:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問