调试时和手动运行时控制台属性输出不同

问题描述 投票:0回答:1

我使用了this示例中的代码并更改了它,因为我需要测试字符网格。

#include <windows.h>
#include <stdio.h>

void write_symbol_in_color(HANDLE h, SHORT x, SHORT y, const char* symbol, WORD color)
{
    COORD here = {0,0};
    here.X = x;
    here.Y = y;

    WORD attribute = color;
    DWORD written = 1;
    ::WriteConsoleOutputAttribute(h, &attribute, 1, here, &written);
    ::WriteConsoleOutputCharacterA(h, symbol, 1, here, &written);
}

int main()
{
    HANDLE hStdOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
    if (hStdOut == INVALID_HANDLE_VALUE)
    {
        printf("Invalid handle");
        return 1;
    }

    write_symbol_in_color(hStdOut, 0, 0, "R", FOREGROUND_RED | FOREGROUND_INTENSITY);
    write_symbol_in_color(hStdOut, 2, 0, "B", FOREGROUND_BLUE | FOREGROUND_INTENSITY);
    write_symbol_in_color(hStdOut, 3, 0, "C", FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
    write_symbol_in_color(hStdOut, 4, 0, "M", FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
    write_symbol_in_color(hStdOut, 5, 0, "Y", FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    while (true)
    {
        write_symbol_in_color(hStdOut, 1, 0, "G", COMMON_LVB_GRID_HORIZONTAL|FOREGROUND_RED);
    }

    return 0;
}

问题是当我开始在 vs studio 中调试时,我得到一个像这个屏幕截图所示的网格(看 G 符号):

with debug

但是当我通过单击 exe 文件手动启动程序时,我得到以下输出:

starting manually (G 符号上没有网格)。

我想知道问题是什么以及我需要做什么才能让字符网格像在工作室中调试时那样显示(显示行\行)?

尝试为变量赋值,但没有帮助。 另外,其他行常量的行为方式相同,我的意思是,当我在符号的左侧、右侧或下方添加行时,如果手动运行程序,它们将不起作用

c++ visual-studio winapi console debug-mode
1个回答
0
投票

这不是一个非常令人满意的答案,但它似乎与执行环境的精确功能有关,因此并不完全在您的控制之下,因为这是由用户/PC配置决定的。

在以下任何一种情况下(在我的情况下,YMMV)都有效:

  1. https://apps.microsoft.com/detail/9n0dx20hk701
  2. 安装 Windows 终端
  3. 将终端配置为默认控制台: enter image description here 我还将命令提示符而不是 Power Shell 设置为默认值,但这可能没有任何区别。

然后,从资源管理器或 Visual Studio 运行的都将在终端中运行,并且无论如何,它的工作原理都是相同的:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.