WriteConsoleOutputCharacterW - 我的新行在哪里?
WriteConsoleOutputCharacterW - Where are my new lines?
我正在尝试学习如何使用屏幕缓冲区,但我犯了一个我不明白的错误。这些是我的屏幕缓冲区的设置:
wchar_t* screen = new wchar_t[nScreenWidth * nScreenHeight];
for (int i = 0; i < nScreenWidth * nScreenHeight; i++) {
screen[i] = L' ';
}
HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleActiveScreenBuffer(hConsole);
DWORD dwBytesWritten = 0;
WriteConsoleOutputCharacterW(hConsole, screen, (nScreenWidth * nScreenHeight), { 0,0 }, &dwBytesWritten);
我设法将我的 2D 阵列打印到它,但奇怪的是它平放在我的终端窗口中(请参阅打印屏幕的链接(。
失败的 2D 阵列的小打印屏幕
就好像所有新行都被删除了一样。这是我将 2D 数组打印到"屏幕"的循环。
int g = 0;
while (g < 100) {
WriteConsoleOutputCharacterW(hConsole, screen, (nScreenWidth * nScreenHeight), { 0,0 }, &dwBytesWritten);
for (int i = 0; i < field.difficulty; i++) {
std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
for (int y = 0; y < field.nFieldHeight; y++) {
for (int x = 0; x < field.nFieldWidth; x++) {
screen[(y + 2) * field.nFieldWidth + (x + 2)] = field.matrix[x][y];
}
}
}
每次打印字符时,是否有可能需要写入屏幕缓冲区中的坐标?
默认情况下,控制台窗口可重新调整大小,这会导致输出换行。您可以使用以下命令来防止这种情况:
// Get console window
HWND hwndWindow = GetConsoleWindow();
// Prevent resize & maximize
LONG lFlags = GetWindowLong(hwndWindow , GWL_STYLE) & ~WS_MAXIMIZEBOX & ~WS_SIZEBOX & ~WS_HSCROLL;
SetWindowLong(hwndWindow , GWL_STYLE, lFlags);
// Get console handle
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// Set window and buffer size
_SMALL_RECT consoleRect = { 0, 0, SCREEN_W - 1, SCREEN_H - 1 };
SetConsoleScreenBufferSize(hConsole, { SCREEN_W, SCREEN_H });
SetConsoleWindowInfo(hConsole, TRUE, &consoleRect);
相关文章:
- 为什么我的代码在终端中没有输出任何内容.开始新行没有错误
- WriteConsoleOutputCharacterW - 我的新行在哪里?
- 句子转换器在存在新行的情况下不起作用
- 取消脱壳:使用模板在多行类型定义中添加一个尖括号后的新行
- C ++有趣的语法,用于在std::cout中打印新行
- 使用 C++ 中的向量在新行上显示文本文件中的列
- 程序在带有新行"n"的 cout 上崩溃
- 将 Unicode 字符存储在.txt文件中的新行中
- endl 不会在输出文件中创建新行
- 带有新行的字符串仅保存在一行中
- C++ 在文本文件中的特定字符后插入新行
- 仅在向量末尾打印新行 - "if"语句在"for"循环之外
- 在哪里可以找到C 中新运营商的确切实现
- Arduino中的串行函数在哪里定义
- 如何通过 C++ 在读取文本文件时忽略特定的新行
- 在SFML中超过窗口边界时,将光标发送到新行
- 在哪里可以获得用于detectMultiScale调用的新的经过训练的分类器级联类型
- 告诉gnu autotools我新安装的库在哪里(使用PKG_CONFIG?)
- 读取整数并在按新行时打印,直到C++文件末尾
- 在每个新行之后再加一个空格