}
/*!
+ * @brief Add a keypress to the "queue"
+ * @details マルチバイト文字をkey_queueに追加する。
+ * @param str マルチバイト文字列
+ */
+static void term_keypress(char *str)
+{
+ if (str) {
+ char *psrc = str;
+ while (*psrc) {
+ term_keypress(*psrc);
+ ++psrc;
+ }
+ }
+}
+
+/*!
* @brief キーダウンのハンドラ
*/
static bool process_keydown(WPARAM wParam, LPARAM lParam)
break;
}
case WM_CHAR: {
+ // wParam is WCHAR because using RegisterClassW
if (term_no_press)
term_no_press = FALSE;
- else
- term_keypress(wParam);
+ else {
+ WCHAR wc[2] = { (WCHAR)wParam , '\0'};
+ term_keypress(to_multibyte(wc).c_str());
+ }
return 0;
}
case WM_LBUTTONDOWN: {
break;
}
case WM_CHAR: {
+ // wParam is WCHAR because using RegisterClassW
if (term_no_press)
term_no_press = FALSE;
- else
- term_keypress(wParam);
+ else {
+ WCHAR wc[2] = { (WCHAR)wParam, '\0' };
+ term_keypress(to_multibyte(wc).c_str());
+ }
return 0;
}
case WM_NCLBUTTONDOWN: {
#include <windows.h>
/*!
- * @brief マルチバイト文字列をワイド文字列へ変換するクラス
+ * @brief マルチバイト文字列(CP932)をワイド文字列へ変換するクラス
*/
class to_wchar {
public:
/*!
- * @brief ワイド文字列をマルチバイト文字列へ変換するクラス
+ * @brief ワイド文字列をマルチバイト文字列(CP932)へ変換するクラス
*/
class to_multibyte {
public:
if (!src)
return;
- int size = ::WideCharToMultiByte(CP_ACP, 0, src, -1, buf, 0, NULL, NULL);
+ int size = ::WideCharToMultiByte(932, 0, src, -1, buf, 0, NULL, NULL);
if (size > 0) {
buf_size = size + 1;
C_MAKE(buf, buf_size, char);
- if (::WideCharToMultiByte(CP_ACP, 0, src, -1, buf, buf_size, NULL, NULL) == 0) {
+ if (::WideCharToMultiByte(932, 0, src, -1, buf, buf_size, NULL, NULL) == 0) {
// fail
kill();
}