wchar_t型の中身が英語か日本語かで識別したいのですがどうすればいいのでしょうか?提示コードのここですの部分に載せたいです。ライブラリ関数などあるのでしょうか?
cpp
1#include "stdio.h" 2#include "stdlib.h" 3#include <Windows.h> 4 5#include "KeyInput.hpp" 6#include "DrawCharactor.hpp" 7 8#include "stdio.h" 9#include "stdlib.h" 10#include <Windows.h> 11 12#include "KeyInput.hpp" 13 14// ウインドウサイズ 15#define MAX_WIDTH ((int)100) 16#define MAX_HEIGHT ((int)40) 17 18FILE* fp = NULL; 19 20 21void print_(wchar_t wc[], size_t size, const char* format, ...) 22{ 23 24 //printf("%s\n\n\n\n",format); 25 26 //文字を生成 27 std::string text; //生成した文字を格納 28 va_list ap; 29 30 char str[50]; 31 va_start(ap, format); 32 vsprintf_s(str, sizeof(str), format, ap); 33 va_end(ap); 34 35 setlocale(LC_CTYPE, ""); 36 size_t count = size; 37 mbstowcs_s(&size, wc, count, str, count - 1); 38 39 //printf("%zu: [%ls]\n", size, wc); 40 //printf("っs\n"); 41 42} 43 44 45int main() 46{ 47 fopen_s(&fp, "Log.txt", "w"); 48 49 50 51 52 53 HANDLE mhScreen; //ウインドウハンドル 54 COORD mDraw_start; //描画開始位置 55 COORD mDraw_size; //画面のサイズ 56 _SMALL_RECT mRect; //画面の描画範囲 57 int mNowBuffer_width = 0; 58 int mNowBuffer_height = 0; 59 60 mhScreen = nullptr; //ウインドウハンドル 61 62 //描画開始座標 63 mDraw_start.X = 0; 64 mDraw_start.Y = 0; 65 66 //描画範囲 67 mDraw_size.X = MAX_WIDTH; 68 mDraw_size.Y = MAX_HEIGHT; 69 70 //ウインドウサイズ 71 mRect.Left = (SHORT)0; 72 mRect.Top = (SHORT)0; 73 mRect.Right = (SHORT)MAX_WIDTH; 74 mRect.Bottom = (SHORT)MAX_HEIGHT; 75 76 int num = 0; 77 78 // バッファーを作成 79 mhScreen = CreateConsoleScreenBuffer(GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CONSOLE_TEXTMODE_BUFFER, NULL); 80 81 if (mhScreen == INVALID_HANDLE_VALUE) 82 { 83 fprintf(stderr, "INVALID_HANDLE_VALUE"); 84 } 85 86 87 SetConsoleScreenBufferSize(mhScreen, mDraw_size); // バッファサイズ変更 88 SetConsoleWindowInfo(mhScreen, TRUE, &mRect); // ウィンドウサイズ変更 89 //mhScreen = CreateConsoleScreenBuffer(GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CONSOLE_TEXTMODE_BUFFER, NULL); 90 mhScreen = CreateConsoleScreenBuffer(GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CONSOLE_TEXTMODE_BUFFER, NULL); 91 SetConsoleActiveScreenBuffer(mhScreen); // 有効化 92 93 CHAR_INFO mWindowBuffer[MAX_HEIGHT * MAX_WIDTH] = { 0 }; 94 95 96 97 KeyInput ki; 98 99 100 101 wchar_t wc[100]; 102 int a = 3; 103 print_(wc, sizeof(wc) / sizeof(wchar_t), "AAA: %d", a); 104 105 printf("ああああ: [ %lc ]\n",wc[0]); 106 107 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 108 while (true) 109 { 110 111/* 112///////////////ここに書きたい 113*/ 114 mWindowBuffer[0].Char.UnicodeChar = wc[0]; 115 mWindowBuffer[0].Attributes = FOREGROUND_GREEN | COMMON_LVB_LEADING_BYTE; 116 117 mWindowBuffer[1].Char.UnicodeChar = wc[0]; 118 mWindowBuffer[1].Attributes = FOREGROUND_GREEN | COMMON_LVB_LEADING_BYTE; 119 120 mWindowBuffer[2].Char.UnicodeChar = wc[1]; 121 mWindowBuffer[2].Attributes = FOREGROUND_GREEN | COMMON_LVB_LEADING_BYTE; 122 123 mWindowBuffer[3].Char.UnicodeChar = wc[1]; 124 mWindowBuffer[3].Attributes = FOREGROUND_GREEN | COMMON_LVB_TRAILING_BYTE; 125 126 127 128 129 130 131 SetConsoleCursorPosition(mhScreen, mDraw_start); 132 WriteConsoleOutput(mhScreen, mWindowBuffer, mDraw_size, mDraw_start, &mRect); //現在のカーソル位置から始まる文字列をコンソール画面バッファーに書き込み 133 FlushConsoleInputBuffer(mhScreen); 134 } 135 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 136 137 138 // スクリーンバッファを解放 139 CloseHandle(mhScreen); 140 mhScreen = NULL; 141 142 143 fclose(fp); 144 145 146 return 0; 147}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。