C语言节制台窗口图形界面编程之四 常用的文本输出函数
文本颜色属性已经学会了,那么下面就进修几个较量常用的文本输出函数,如下:
BOOL FillConsoleOutputAttribute( // 填充字符属性 HANDLE hConsoleOutput, // 句柄 WORD wAttribute, // 文本属性 DWORD nLength, // 个数 COORD dwWriteCoord, // 开始位置 LPDWORD lpNumberOfAttrsWritten // 返回填充的个数 ); BOOL FillConsoleOutputCharacter( // 填充指定命据的字符 HANDLE hConsoleOutput, // 句柄 TCHAR cCharacter, // 字符 DWORD nLength, // 字符个数 COORD dwWriteCoord, // 起始位置 LPDWORD lpNumberOfCharsWritten // 已写个数 ); BOOL WriteConsoleOutputCharacter( // 在指定位置处插入指定命量的字符 HANDLE hConsoleOutput, // 句柄 LPCTSTR lpCharacter, // 字符串 DWORD nLength, // 字符个数 COORD dwWriteCoord, // 起始位置 LPDWORD lpNumberOfCharsWritten // 已写个数 );
别的再先容一个暗示区域的布局体,如下:
typedef struct _SMALL_RECT //暗示矩形区域的布局体 { SHORT Left; //左界线 SHORT Top; //上界线 SHORT Right; //右界线 SHORT Bottom; //下界线 } SMALL_RECT; /* 微软官方的说法是 Left 区域的左上极点的X坐标 Top 区域的左上极点的Y坐标 Right 区域的右下极点的X坐标 Bottom 区域的右下极点的Y坐标 */
本栏目
通过以上的文本输出函数,我们来做一个简朴的在一个具有阴影结果的窗口显示字符串的示例措施,如下:
#include <stdio.h> #include <stdlib.h> #include <Windows.h> #include <conio.h> int main() { char *str = "Hello World!"; //界说输出信息 int len = strlen(str), i; WORD shadow = BACKGROUND_INTENSITY; //阴影属性 WORD text = BACKGROUND_GREEN | BACKGROUND_INTENSITY; //文本属性 HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //得到尺度输出设备句柄 CONSOLE_SCREEN_BUFFER_INFO csbi; //界说窗口缓冲区信息布局体 GetConsoleScreenBufferInfo(handle_out, &csbi); //得到窗口缓冲区信息 SMALL_RECT rc; //界说一个文本框输出区域 COORD posText; //界说文本框的起始坐标 COORD posShadow; //界说阴影框的起始坐标 //确定区域的界线 rc.Top = 8; //上界线 rc.Bottom = rc.Top + 4; //下界线 rc.Left = (csbi.dwSize.X - len) / 2 - 2; //左界线,为了让输出的字符串居中 rc.Right = rc.Left + len + 4; //右界线 //确定文本框起始坐标 posText.X = rc.Left; posText.Y = rc.Top; //确定阴影框的起始坐标 posShadow.X = posText.X + 1; posShadow.Y = posText.Y + 1; for (i=0; i<5; ++i) //先输出阴影框 { FillConsoleOutputAttribute(handle_out, shadow, len + 4, posShadow, NULL); posShadow.Y++; } for (i=0; i<5; ++i) //在输出文本框,个中与阴影框重合的部门会被包围掉 { FillConsoleOutputAttribute(handle_out, text, len + 4, posText, NULL); posText.Y++; } //配置文本输出处的坐标 posText.X = rc.Left + 2; posText.Y = rc.Top + 2; WriteConsoleOutputCharacter(handle_out, str, len, posText, NULL); //输出字符串 SetConsoleTextAttribute(handle_out, csbi.wAttributes); // 规复本来的属性 CloseHandle(handle_out); return 0; }
以上样例在Code::Blocks 13.12中编译通过。
From:cnblogs 龙梦之痕