- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我正在尝试使用 WriteConsoleOutputA
进行输出。我有这段代码:
CHAR_INFO letterA;
letterA.Char.AsciiChar = 'A';
letterA.Attributes =
FOREGROUND_RED | FOREGROUND_INTENSITY |
BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY;
//Set up the positions:
COORD charBufSize = { 1, 1};
COORD characterPos = { 0, 0 };
SMALL_RECT writeArea = { 0,0,0,0 };
//Write the character
WriteConsoleOutputA(wHnd, &letterA, charBufSize, characterPos, &writeArea);
所以此时它写了一个黄色背景的红色A
,但是例如,如果我想让A
出现在坐标(5,5)它即使我将 SMALL_RECT
更改为 {0, 0, 10, 10}
也不会打印它。
或者如果我想在第一个右边写另一个A
:
WriteConsoleOutputA(wHnd, &letterA, charBufSize, characterPos, &writeArea);
WriteConsoleOutputA(wHnd, &letterA, charBufSize, { 0, 1 }, &writeArea);
我从这个图形控制台模式开始,如果有人能告诉我如何在我想要的坐标中打印那个字符,那将非常有帮助。
我试图改变它,像这样改变坐标:
COORD charBufSize = { 5, 10};
COORD characterPos = { 3, 2 };
SMALL_RECT writeArea = { 0,0,5,10 };
但它在所有缓冲区 5*10 中打印奇怪的字符和其他颜色。
谢谢
凯撒。
最佳答案
WriteConsoleOutput(..)
是一个需要小心处理的复杂函数。
dwBufferSize
参数(=您的 charBufSize
)只不过是 lpBuffer
的尺寸规范参数(=你的 letterA
)。唯一的区别不是简单地告诉 letterA
大小为 1
是通过将其拆分为两个轴,您可以使用 letterA
指定文本 block 的宽度和高度其中的字符。但请记住 letterA
的大小必须是 charBufSize.X * charBufSize.Y
.否则WriteConsoleOutput
会做奇怪的事情,因为它使用未初始化的内存。
dwBufferCoord
参数(= 您的 characterPos
)定义了 letterA
中的位置从哪里读取要写入控制台的字符。所以它只是定义了一个索引偏移量。在您的示例中,这应该始终是 { 0, 0 }
(等于 letterA[0]
)因为 letterA
只是一个字符。
lpWriteRegion
参数(= 你的 writeArea
)完成了所有的魔法。它指定了调用要写入的区域的位置、宽度和高度。要写入的数据由前面的参数定义。
所以要写一个字符到特定位置x, y
执行以下操作:
COORD charBufSize = {1, 1};
COORD characterPos = {0, 0};
SMALL_RECT writeArea = {x, y, x, y};
WriteConsoleOutputA(wHnd, &letterA, charBufSize, characterPos, &writeArea);
为了更好地理解,请使用以下示例并稍微调整一下 charBufSize
的值, characterPos
和 writeArea
:
int i;
CHAR_INFO charInfo[10 * 10];
/* play with these values */
COORD charBufSize = {10, 10}; /* do not exceed x*y=100 !!! */
COORD characterPos = {5, 0}; /* must be within 0 and x*y=100 */
SMALL_RECT writeArea = {2, 2, 12, 12};
for (i = 0; i < (10 * 10); i++)
{
charInfo[i].Char.AsciiChar = 'A' + (i % 26);
charInfo[i].Attributes = FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY;
}
WriteConsoleOutputA(wHnd, charInfo, charBufSize, characterPos, &writeArea);
这是上面示例中显示控制台和变量的参数的屏幕截图。我希望这能让它更清楚一点。
关于c++ - 使用 WriteConsoleOutputA 在控制台中输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38343232/
我是一名优秀的程序员,十分优秀!