c语言控制台窗口图形界面编程(四) - c语言程序开发技术文章,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

#include

#include

#include

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;

}

99c5d425ee82176c64e89db5166f0383.png

以上样例在Code::Blocks 13.12中编译通过。

From:cnblogs 龙梦之痕

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值