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