将字符或颜色写入连续单元格

【勇芳软件工作室】汉化HomePreviousNext

字符或颜色属性可以写入屏幕缓冲区中的指定字符单元格。以下示例使用WriteConsoleOutputCharacter函数从屏幕缓冲区的左上角开始写入一串字符串。然后,该示例使用WriteConsoleOutputAttribute函数将一串颜色属性写入同一行的前51个单元格。两个函数的【坐标】参数指定屏幕缓冲区中开始写入的字符单元格。显示这些字符或颜色的控制台窗口中的位置取决于屏幕缓冲区的当前窗口矩形。有关屏幕缓冲区及其窗口之间关系的其他信息,请参阅窗口和屏幕缓冲区大小滚动屏幕缓冲区.

HANDLE hOutput;

LPTSTR lpszString = "Character String";

DWORD cWritten;

BOOL fSuccess;

COORD coord;

WORD wColors[3], wColor;

CHAR chFillChar;

/ *将一串字符写入屏幕缓冲区。*/

coord.X = 0; /* start at first cell */

coord.Y = 0; /* of first row */

fSuccess = WriteConsoleOutputCharacter(

hOutput,/ *屏幕缓冲区句柄* /

lpszString,/ *指向源字符串的指针* /

lstrlen(lpszString),/ * string的长度* /

coord,/ *第一个单元格写入* /

&cWritten); /* actual number written to */

如果(!fSuccess)

MyErrorExit("WriteConsoleOutputCharacter");

/ *将一串颜色写入屏幕缓冲区。*/

wColors[0] = BACKGROUND_RED;

wColors[1] = BACKGROUND_RED | /* white background */

BACKGROUND_GREEN |

BACKGROUND_BLUE;

wColors[2] = BACKGROUND_BLUE;

for (;fSuccess && coord.X < 50; coord.X += 3)

fSuccess = WriteConsoleOutputAttribute(

hOutput,/ *屏幕缓冲区句柄* /

wColors,/ *指向源字符串的指针* /

3,/ *字符串长度* /

coord,/ *第一个单元格写入* /

&cWritten); /* actual number written to */

如果(!fSuccess)

MyErrorExit("WriteConsoleOutputAttribute");

相同的字符或颜色属性可以写入从指定位置开始的指定数量的连续屏幕缓冲区单元。以下示例使用FillConsoleOutputCharacter功能清除80×50字符的屏幕缓冲区,然后使用FillConsoleOutputAttribute功能设置相同单元格的颜色属性。

/ *填写一个80×50字符的屏幕缓冲区与空格字符。*/

coord.X = 0; /* start at first cell */

coord.Y = 0; /* of first row */

chFillChar = ' ';

fSuccess = FillConsoleOutputCharacter(

hStdout,/ *屏幕缓冲区句柄* /

chFillChar,/ *填充空格* /

80 * 50,/ *要填充的单元数*

coord,/ *第一个单元格写入* /

&cWritten); /* actual number written to */

如果(!fSuccess)

MyErrorExit("FillConsoleOutputCharacter");

/ *将80×50个字符的屏幕缓冲区颜色设置为红色的白色文本。*/

wColor = BACKGROUND_RED |

FOREGROUND_RED |

FOREGROUND_GREEN |

FOREGROUND_BLUE;

fSuccess = FillConsoleOutputAttribute(

hStdout,/ *屏幕缓冲区句柄* /

wColor,/ *颜色填充* /

80 * 50,/ *要填充的单元数*

coord,/ *第一个单元格写入* /

&cWritten); /* actual number written to */

如果(!fSuccess)

MyErrorExit("FillConsoleOutputAttribute");