C语言控制台窗口图形界面编程(四):文本输出

来源:互联网 发布:福建晨曦软件下载 编辑:程序博客网 时间:2024/05/16 06:19
       文本颜色属性已经学会了,那么下面就学习几个比较常用的文本输出函数,如下:
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中编译通过。

1 0
原创粉丝点击