3. gotoxy()光标定位函数,大家用printf()函数实今后决定台出口了hello

前言:

 一、显示器操作函数
     1. clrscr()清除字符窗口函数
     2. window()字符窗口函数
     3. gotoxy()光标定位函数
     4. clreol() 清除光标行尾字符函数
     5. insline() 插入空行函数
     6. delline() 删除一行函数
     7. gettext() 拷进文字函数
     8. puttext() 拷出文字函数
     9. movetext() 移动文字函数
 二、字符属性函数
    10. textmode() 文本格局函数 
    11. highvideo()高亮度函数
    12. lowvideo() 低亮度函数
    13. normvideo(void);
    14. textcolor() 文本颜色函数
    15. textattr() 文本属性函数
    16.textbackground() 文本背景函数
三、 屏显状态函数
    17. wherex() 光标处x坐标函数
    18. wherey() 光标处y坐标函数
    19. gettextinfo() 获取文本窗口新闻函数

控制台文本窗口的主宰是基于win32 api(win32
api可分晓为微软给我们提供的一文山会海函数的集纳)完结的;

    在Borland
C++里面提供了字符屏幕和图表函数。字符显示屏的骨干是窗口(Window),它是屏幕的活动有的,字符输出或体未来运动窗口中开展。窗口在缺省时,就是整个显示屏。窗口可以依照要求指定其大小。同样,对图片函数的操作,也提供了(Viewport)。也就是说图形函数的操作都以在视口上开展。图形视口与字符窗口具有相同的特点,用户可以在显示器上定义大小不一的视口,若不定义视口大小,它就是总体屏幕。
   
窗口是在字符显示器下的定义,唯有字符才能在窗口中浮现出来,那时用户可以访问的微小单位为1个字符。视口是在图片显示屏状态下的概念,文本与图片都得以在视口上体现,用户可访问的细卡片机位是三个像素(像素这一术语最初用来指屏幕上不大的、单独的发光点单元。可是今后,其含义拓宽为指图形显示屏上的蝇头可访问点)。
   
字符和图表状态下,屏幕上的职责都以由它们的行与列所决定的。有一点须指出:字符状态左上角坐标为(1,1),但图形左上角坐标为(0,0)。
    驾驭字符显示器和图纸函数与窗口和视口的涉及是很主要的。例如,字符屏幕光标地方函数gotoxy()将光标移到窗口的x,y地方上,那未必是相对于一切屏幕。上面介绍常用的几类字符屏幕函数的效率用途、操作方法及其例行程序。

例1:

一、显示屏操作函数
   
编写程序绘图平常要用到对字符屏幕举办操作。例如,在往屏幕上写字符以前,首先要将显示器清除干净。又如,有时需求在屏幕上多处写上肉中刺样的字符内容,那时最好用显示器拷贝来高作用地完结这一职务。对那么些操作,Borland
C++提供了一层层字符显示器操作函数来落到实处。

#include <stdio.h>int main()
{
    printf("Hello World!\n");
    return 0;
}
  1. clrscr()清除字符窗口函数
    职能:函数clrscr()清除整个当前字符窗口,并且把光标定位于左上角(1,1)处。
    用法:此函数调用方式为 void clrscr(void);
    证实:括号中void 表示无参数。
          该函数相应的头文件为conio.h
    返回值:无
    例:使用这么些函数的事例见4.clreol()函数的实例中。

  2. window()字符窗口函数
    效益: 函数window()用于在指定地点树立二个字符窗口。
    用法: 此函数调用方式为 void window(int left,int top,int right,int
    bottom);
    证实: 函数中参数left,top为窗口左上角坐标;right,bottom为其右下角坐标。
          
    若有2个坐标是低效的,则window()函数不起效用。一旦该函数调用成功,那么全部定位坐标都以周旋于窗口的,而不是相持于整个显示屏。然则建立窗口所用的坐标总是相对整个屏幕的断然坐标,而不是相对当前窗口的相对坐标。那样用户就足以依照种种急需树立两个互不嵌套的窗口。
           此函数的头文件为conio.h。
    返回值:无
    例: 调用这些函数的落到实处例见3.gotoxy()函数的事例中。

  3. gotoxy()光标定位函数
    效益: 函数gotoxy()将字显示屏上的光标移到眼下窗口指定的地方上。
    用法: 这几个函数调用方式为void gotoxy(int x,int y);
    证实: 括号里x,y是,
    光标定位的坐标,若是中间3个坐标值无效(如坐标超界),那么光标不会活动。
           此函数在字符状态(有时称为文本状态)下日常用到
    ,其对应的头文件为conio.h
    返回值:无
    例:
    上边程序建立八个窗口,然后在窗口里显示字符,字符的职分是调用该函数显然的。
    #include”conio.h>
    void border(int startx,int starty,int endx,int endy)
    {
       register int i;
       gotoxy(1,1);
       for(i=0;i<=endx-startx;i++)
          putch(‘-‘);
       gotoxy(1,endy-starty);
       for(i=0;i<=endx-startx;i++)
          putch(‘-‘);
       for(i=2;i<=endy-starty;i++){
          gotoxy(1,i);
          putch(‘1’);
          gotoxy(endx-startx+1,i);
          putch(‘1’);
       }
    }

运营结果:

main()
{
   void border(int,int,int,int);
   clrscr();
   window(6,8,38,12);
   border(6,8,38,12);
   gotoxy(2,2);
   printf(“window 1”);
   window(8,16,40,24);
   border(8,16,40,24);
   gotoxy(3,2);
   printf(“window 2”);
   getch();
}

图片 1

  1. clreol() 清除光标行尾字符函数
    效用:
    函数clreol()在当下字符窗口中排除从光标地方到行尾的有所字符,而光标地方保持不变。
    用法: 它的调用形式为void clreol(void);
    证实: 此函数的相应头文件为 conio.h
    返回值:无
    例: 程序中接纳了函数clreol()和clrscr()
    #include “conio.h>
    void main()
    {
       register int i;
       gotoxy(6,8);
       printf(“This is a test of the clreol() function.”);
       getch();
       gotoxy(6,8);
       clreol();
       for(i=0;i<20;i++)
          printf(“Hello\n”);
       getch();
       clrscr();
    }

  2. insline() 插入空行函数
    效益:
    函数insline()插入一空行到目前光标所在行上,同时光标以下的装有行都向下顺移一行。
    用法: 此函数的调用格局为void insline(void);
    评释: 该函数只用于文书格局,并且在当了符窗口才使得。
           那一个函数的对应头文件是 conio.h
    返回值:无
    例: 程序给出了insline()函数的用法。
    #include “conio.h”
    void main()
    {
       registser int i;
       clrscr();
       for(i=1;i<24;i++)
       {
          gotoxy(1,i);
          printf(“This is line %d\n”,i);
       }
       getch();
       gotoxy(1,10);
       insline();
       getch();
    }

  3. delline() 删除一行函数
    效能: 函数delline()删除当前窗口内光标所在行,同时把该行下面全部行都上移一行。
    用法: 此函数调用格局为 void delline(void);
    表达:
    注意,若是当前窗口小于整个显示器,那么该函数只影响到窗口内的字符。
           那些函数相应的头顶文件是conio.h
    返回值: 无
    例:先在显示屏上浮现16行文字,然后删除第五行
    #include “conio.h”
    void main()
    {
       register int i;
       clrscr();
       for(i=0;i<16;i++) printf(“line %d\n”,i);
       getch();
       gotoxy(1,4);
       delline();
       getch();
    }

例1中,我们用printf()函数实以后支配台出口了hello
world!可是当大家想要将事先输出的情节清除时,在stdio.h中的函数并无法满意我们的急需;那时我们将要借助win32
api函数

7.gettext() 拷进文字函数
功用: 函数gettext()用于文书状态下将显示器上矩形域内的文字拷进内存。
用法: 该函数调用方式为 int gettext(int left,int top,int right,int
bottom,void *buffer);
声明:
函数中参数left,top为矩形区域的左上角坐标,right,bottom为其右下角坐标,这一个坐标是屏幕的断然坐标,不是窗口的周旋坐标。buffer指针必须指向3个十足保存该矩形域内文字的内存。所用内存大小按下式统计:
   点头用字节数=矩形哉内的行数×矩形域的列数×2
那边将行数乘以列数再乘以2的由来是保存屏幕上各个字符要用八个字节存储单元,三个字节存储单元存放字符自己,而另3个存放其属性。
此函数相应的头文件是 conio.h
再次回到值: 若函数调用成功则赶回1,否则返顺0。
例:
把屏幕左上角点(1,1)和右下角点(10,10)的区域拷贝到buf指向的内存中去。
   buf=(char *)malloc(10*10*2);
   if(!buf)gettext(1,1,10,10,buf);

例2:

  1. puttext() 拷出文字函数
    效益:
    函数puttext()把在此此前由gettext()保存到buffer指向的内存中的文字拷出到显示器上1个矩形区域中。
    用法: 此函数调用情势为 int puttext(int left,int top,int right,int
    bottom,void *buffer);
    注脚:
    函数里left,top为付出的屏幕上矩形区域的左上角点,right,bottom为其右下角点,其坐标是用屏幕的相对化坐标,而不是用窗口的冲突坐标。
       该函数相应的头文件为conio.h
    重临值: 函数调用成功再次来到值为1,否则重回0。
    例:
    显示屏上有个别区域内容拷进buf指向的内存中,然后又将那个文字拷出到显示器上新岗位。
       buf=(char *)malloc(10*10*2);
       gettext(1,1,10,10,buf);
       puttext(16,16,30,30,buf);

  2. movetext() 移动文字函数
    职能: 函数movetext()将显示屏上七个矩形区域的文字移到另2个区域上。
    用法: 该函数调用格局为 int movetext(int left,int top,int right,int
    bottom,int newleft,int newtop);
    证实:
    上面left,top为矩形区域上角坐标,right,bottom为其右下角坐标,newleft,newright为移动到区域左上角坐标。那个坐标是屏幕的相对坐标,不是窗口的绝对坐标。
      
    若要把屏幕上一段文字移到显示器的另一地方,那么使用movetext()函数比用gettext()然后再用puttext()效能更高。
       此函数相应的头文件是conio.h
    重回值: 假若有三个之上坐标无效,那么函数重返值为0,否则再次回到1。
    列:
    把显示器左上角点(8,8),右下角点(20,20)的矩形区域文字移动到左上角点(10,10)的岗位上:
       movetext(8,8,20,20,10,10);

  3. textmode() 文本形式函数
    效果: 函数textmode()针屏幕设置为文本形式(大概说字符状态)。
    用法: 函数调用情势为 void textmode(int mode);
    表达:
    参数mode必须为表1-2中所示的格局之一⑴以用格局名(符号值),也得以用其等价的整数值。

#include <stdio.h>
#include <windows.h>
int main()
{
    printf("Hello World!\n");
    Sleep(1000);
    system("cls");
    return 0;
}

表1-2 文本方式

形式名(符号值)         等价整数值      说   明

BW40                        0          40列黑白
C 40                        1          40列彩色
BW80                        2          80列黑白
C 80                        3          80列彩色
MONO                        7          80列单色

运作结果:

LASTMODE                   -1          上次情势

   调用该函数后,显示器复位,并且具有字符的个性复苏其缺省值。
   此函数对应的头文件是conio.h
返回值: 无
例: 把显示屏设置为80列彩色形式
   textmode(C80);

二、字符属性函数
  
用户可以安装字符突显的高亮度或低亮度的写的符闪烁及其背景颜色等。具有那个操作的函数称为字符属性函数。除了仅帮忙单情势和单色的呈现卡外,字符属性函数适用于其他全体的显示卡。

  1. highvideo()高亮度函数
    效用: 函数highvideo()设置显示屏为高亮度突显。
    用法: 此函数调用方式为void highvideo(void);
    证实:
    调用该函数后,写到显示屏上的字符是高亮度的。此函数只适用于文本形式状态(或说字符显示屏状态)。
       这么些函数对应的头文件为 conio.h
    返回值: 无
    例: 设置屏幕突显为高亮度的。
       highvideo();

  2. lowvideo() 低亮度函数
    成效: 函数lowvideo()设置显示器为低亮度展现。
    用法: 该函数调用格局为void lowvideo(void);
    表达:
    调用该函数后,此时写到显示器上的字符是低亮度的。这些函数只适用于文本情势状态(或说字符屏幕状态)。
       此函数相应的头文件是 conio.h
    返回值: 无
    例: 设置显示器突显为低亮度的
       lowvideo();

  3. normvideo(void);
    成效: 函数normvideo()设置屏幕为不奇怪亮度显示。
    用法: 这些函数调用形式为void normvideo(void);
    表达:
    调用该函数后,此时写到显示器上的字符是正规亮度的,该函数只适用于文本情势状态(或说字符状显示器状态)。
       此函数相应的头文件为conio.h
    返回值: 无
    例: 设置屏幕显示为符合规律亮度。
       normvideo();

  4. textcolor() 文本颜色函数
    功用:
    函数textcolor()设置字符屏幕下文件颜色(或字符颜色),它也可以用于使字符闪烁。
    用法: 这些函数调用形式为void textcolor(int color);
    表达: 函数中参数color的有效值可取表1-3中的颜色名(即宏名)或等价值。

图片 2

表1-3 颜色名与等价值

   名          等价值      含 义
BLACK             0          黑
BLUE              1          蓝
GREEN             2          绿
CYAN              3          青
RED               4          红
MAGENTA           5          洋红
BROWN             6          棕
LIGHTGRAY         7          淡灰
DRAKGRAY          8          深灰
LIGHTBLUE         9          淡蓝
LIGHTGREEN       10          淡绿
LIGHTCYAN        11          淡青
LIGHTRED         12          淡红
LIGHTMAGENTA     13          淡洋红
YELLOW           14          黄
WHITE            15          白

例2中,用到windows.h中的Sleep();system();函数,Sleep(一千)函数功用为延时1s后先后向下运转,system(“cls”)清除内容,所以在例2中,程序运转突显hello
world!一秒后就撤除

BLINK           128          闪烁

textcolor()函数执行后,只影响其后输出探险符颜色,而不改动一度在眼下显示器上的任何字符颜色。显著,假若要求输出的字符闪烁,只要将函数中参数color取为BLINK即可,假若要使字符带颜色闪烁,就必须将所选的颜色值与128作“或”运算。
   此函数相应的头文件是 conio.h
返回值: 无
例:
下边程序段中第贰条语句使出口的字符闪烁,第贰条语句使字符输出为经色同时闪烁:
   textcolor(BLINK);
   printf(“hello”);
   textcolor(RED|BLINK);

  1. textattr() 文本属性函数
    成效:
    函数textattr()用于安装文本属性,即字符背景颜色、字符本人颜色和字符闪烁与否。
    用法: 函数调用形式为void textattr(int attribute);
    注解:
    设置字符背景颜色属性字节的最简易方法是,用所选的背景颜色值乘以16再与字符颜色值作按位或(OCRUISER)运算。例如要求米红背景、深褐字符,就安装成RED*16|GREEN,若还要字符闪烁,就把背景颜色值、字符颜色值与闪烁值一起
    按位作或运算。如蓝背景、黄字符且闪烁,就设置成为:
       YELLO|128|BLUE*16
       第0位用于安装字符颜色。
       此函数相应的头文件为conio.h
    返回值: 无
    例: 设置背景为莲灰、字符为革命并且字符闪烁:
       textattr(RED|128|BLUE*16);

16.textbackground() 文本背景函数
功效:
函数textbackground()设置字符屏幕下文件背景颜色(或字符背景颜色)。
用法: 此函数调用方式为void textbackground(int bcolor);
表明: 参数bcolor 的有效值取表1-4背景颜色(即宏名)或等价值。

用于控制台窗口操作的API函数如下:

表1-4 背景颜色与等价值

GetConsoleScreenBufferInfo 拿到控制台窗口音讯

   背景颜色            等价值         含   义

   BLACK                 0               黑
   BLUE                  1               蓝
   GREEN                 2               绿
   CYAN                  3               青
   RED                   4               红
   MAGENTA               5               洋红

GetConsoleTitle 拿到控制台窗口标题

   BROWN                 6               棕

调用该函数只影响两次三番写的字符背景颜色,而不转移近期体以后屏幕上的字符背景颜色。
   这一个函数对应的头文件是conio.h
返回值: 无
例: 设置文本背景颜色为粉红色:
   textbackground(BLUE));

三、 屏显状态函数
那边提供多少个在文件情势下显示屏突显状态的函数

  1. wherex() 光标处x坐标函数
    效果: 函数wherex()重回当前窗口中光标处横向坐标。
    用法: 此函数调用格局为int wherex(void);
    表达: 那么些函数调用无参数,其相应的头文件是conio.h
    重临值: 函数调用成功,重返光标处x坐标值。
    例: 调用这些函数的实例见18.wherey()函数的例中。

  2. wherey() 光标处y坐标函数
    功能: 函数wherey()再次回到当前窗口中光标处纵向坐标。
    用法: 该函数调用方式为int wherey(void);
    阐明: 此函数调用无参数,其相应的头文件是conio.h
    重回值: 函数调用成功,再次来到光标处y坐标值。
    例:
    调作函数wherex()与wherey(),重回当前光标处x坐标与y坐标,并赋给整型变量xpos
    ,ypos。
       int xpos,ypos;
       xpos=wherex();
       ypos=wherey();

  3. gettextinfo() 获取文本窗口新闻函数
    功能: 函数gettextinfo()获取当前文件窗口消息,并存放在实参结构中。
    用法: 函数调用格局为void gettextinfo(struct text-info *info);
    讲明: 函数中参数info 为struct text-info结构型指针,struct
    text-info结构在此函数相应的头文件中定义为:
       struct text-info{
          unsigned char winleft;         // 窗口左上角x坐标
          unsigned char wintop;          // 窗口左上角y坐标
          unsigned char winright;        // 窗口右下角x坐标
          unsigned char winbottom;       // 窗口右下角y坐标
          unsigned char attribute;       // 文本属性
          unsigned char normattr;        // 平常属性
          unsigned char currmode;        // 当前屏显情势
          unsigned char screenhight      // 文本窗口高度(以行数计)
          unsigned char screenwidth;     // 文本窗口宽度(以字符个数计)
          unsigned char curx;            // 光标处x坐标
          unsigned char cury;            // 光标处y坐标
      };
       记住,调用函数gettextinfo()时,要传送struct
    text-info结构型指针或该社团的首地址,不要传递结构变量本身。
       这一个函数对应的头文件是conio.h
    重返值:
    再次回到文本窗口角点坐标、高涨幅、文本属性等值,并存放在info所指向的布局变量中。
    例: 程序语句表明什么正确调用gettextinfo()函数:
       struct text-info win-status;
       gettextinfo(&win-status);

 


ScrollConsoleScreenBuffer 在缓冲区中移动数据块

SetConsoleScreenBufferSize 更改指定缓冲区大小

SetConsoleTitle 设置控制台窗口标题

SetConsoleWindowInfo 设置控制台窗口音讯

例3:

#include <windows.h>
#include <stdio.h>

int main(void)

{
       SetConsoleTitle(L"hello world!"); // 设置窗口标题
       printf("hello world!");
       return 0;
}

运转结果:

图片 3

在例3中,我们应用了setconsoletitle()函数;窗口标题已然改变成为hello
world!了

有关其他函数的接纳方式,可以度,那里一时半刻不做赘述了。。。。。

 

1.控制台初步化

 

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    //设置控制台窗口标题
    //SetConsoleTitle("更改标题字符串")
    SetConsoleTitleA("hello world!");

    //获取控制台窗口信息;
    //GetConsoleScreenBufferInfo(HANDLE hConsoleOutput, CONSOLE_SCREEN_BUFFER_INFO *bInfo)
    //第一个hConsoleOutput参数(标准控制句柄)通过GetStdHandle()函数返回值获得
    //第二个参数CONSOLE_SCREEN_BUFFER_INFO 保存控制台信息结构体指针
        /*数据成员如下:
        {
            COORD dwSize; // 缓冲区大小
            COORD dwCursorPosition; //当前光标位置
            WORD wAttributes; //字符属性
            SMALL_RECT srWindow; //当前窗口显示的大小和位置
            COORD dwMaximumWindowSize; //最大的窗口缓冲区大小
        }
        */
    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO bInfo;
    GetConsoleScreenBufferInfo(hOutput, &bInfo);
    cout << "窗口缓冲区大小:" << bInfo.dwSize.X << ", " << bInfo.dwSize.Y << endl;
    cout << "窗口坐标位置:" << bInfo.srWindow.Left << ", " << bInfo.srWindow.Top
         << ", "<< bInfo.srWindow.Right << ", " << bInfo.srWindow.Bottom << endl;

    //设置显示区域坐标
    //SetConsoleWindowInfo(HANDLE, BOOL, SMALL_RECT *);
    SMALL_RECT rc = {0,0, 79, 24}; // 坐标位置结构体初始化
    SetConsoleWindowInfo(hOutput,true ,&rc);
    cout << "窗口显示坐标位置:" << bInfo.srWindow.Left << ", " << bInfo.srWindow.Top
         << ", "<< bInfo.srWindow.Right << ", " << bInfo.srWindow.Bottom << endl;

    //更改指定缓冲区大小
    //SetConsoleScreenBufferSize(HANDLE hConsoleOutput, COORD dwSize)
    //COORD为一个数据结构体
    COORD dSiz = {80, 25};
    SetConsoleScreenBufferSize(hOutput, dSiz);
    cout << "改变后大小:" << dSiz.X << ", " << dSiz.Y << endl;

    //获取控制台窗口标题
    //GetConsoleTitle(LPTSTR lpConsoleTitle, DWORD nSize)
    //lpConsoleTitle为指向一个缓冲区指针以接收包含标题的字符串;nSize由lpConsoleTitle指向的缓冲区大小
    char cTitle[255];
    GetConsoleTitleA(cTitle, 255);
    cout << "窗口标题:" << cTitle << endl;

    // 关闭标准输出设备句柄
    CloseHandle(hOut);
    return 0;
}

运行结果:

图片 4

 

2.设置文本属性(文本颜色、移动决定)

 

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    /*设置文本属
    BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);//句柄, 文本属性*/

    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄
    WORD wr1 = 0xfa;//定义颜色属性;第一位为背景色,第二位为前景色
    SetConsoleTextAttribute(hOut, wr1);
    cout << "hello world!" << endl;

    WORD wr2 = FOREGROUND_RED | FOREGROUND_INTENSITY;//方法二用系统宏定义颜色属性
    SetConsoleTextAttribute(hOut, wr2);
    cout << "hello world!" << endl;

    /*移动文本位置位置
    BOOL ScrollConsoleScreenBuffer(HANDLE hConsoleOutput, CONST SMALL_RECT* lpScrollRectangle, CONST SMALL_RECT* lpClipRectangle,
                                   COORD dwDestinationOrigin,CONST CHAR_INFO* lpFill);
                                  // 句柄// 裁剪区域// 目标区域 // 新的位置// 填充字符*/
    //输出文本
    SetConsoleTextAttribute(hOut, 0x0f);
    cout << "01010101010101010101010101010" << endl;
    cout << "23232323232323232323232323232" << endl;
    cout << "45454545454545454545454545454" << endl;
    cout << "67676767676767676767676767676" << endl;

    SMALL_RECT CutScr = {1, 2, 10, 4}; //裁剪区域与目标区域的集合行成剪切区域
    SMALL_RECT PasScr = {7, 2, 11, 9}; //可以是NULL,即全区域
    COORD pos = {1, 8};     //起点坐标,与裁剪区域长宽构成的区域再与目标区域的集合为粘贴区

    //定义填充字符的各个参数及属性
    SetConsoleTextAttribute(hOut, 0x1);
    CONSOLE_SCREEN_BUFFER_INFO Intsrc;
    GetConsoleScreenBufferInfo(hOut, &Intsrc);
    CHAR_INFO chFill = {'A',  Intsrc.wAttributes}; //定义剪切区域填充字符
    ScrollConsoleScreenBuffer(hOut, &CutScr, &PasScr, pos, &chFill); //移动文本

    CloseHandle(hOut); // 关闭标准输出设备句柄
    return 0;
}

 

运维结果:

图片 5

WORD文本属性预定义宏:(可以直接用16进制表示,WORD w = 0xf0;前一位表示背景色,后一位代表前景色)
FOREGROUND_BLUE 蓝色
FOREGROUND_GREEN 绿色
FOREGROUND_RED 红色
FOREGROUND_INTENSITY 加强
BACKGROUND_BLUE 蓝色背景
BACKGROUND_GREEN 绿色背景
BACKGROUND_RED 红色背景
BACKGROUND_INTENSITY 背景色加强
COMMON_LVB_REVERSE_VIDEO 反色
当前文本属性信息可通过调用函数GetConsoleScreenBufferInfo后,在CONSOLE_SCREEN_ BUFFER_INFO结构成员wAttributes中得到。

在指定位置处写属性
    BOOL WriteConsoleOutputAttribute(HANDLE hConsoleOutput,  CONST WORD *lpAttribute, DWORD nLength,
                                    COORD dwWriteCoord, LPDWORD lpNumberOfAttrsWritten);
                                    //句柄, 属性, 个数, 起始位置, 已写个数*/
填充指定数据的字符
    BOOL FillConsoleOutputCharacter(HANDLE hConsoleOutput, TCHAR cCharacter,DWORD nLength, COORD dwWriteCoord,
                               LPDWORD lpNumberOfCharsWritten);
                               // 句柄, 字符, 字符个数, 起始位置, 已写个数*/
在当前光标位置处插入指定数量的字符
    BOOL WriteConsole(HANDLE hConsoleOutput, CONST VOID *lpBuffer, DWORD nNumberOfCharsToWrite,
                     LPDWORD lpNumberOfCharsWritten,LPVOID lpReserved);
                     //句柄, 字符串, 字符个数, 已写个数, 保留*/
向指定区域写带属性的字符
    BOOL WriteConsoleOutput(HANDLE hConsoleOutput, CONST CHAR_INFO *lpBuffer, COORD dwBufferSize,
                        COORD dwBufferCoord,PSMALL_RECT lpWriteRegion );
                        // 句柄 // 字符数据区// 数据区大小// 起始坐标// 要写的区域*/
在指定位置处插入指定数量的字符
    BOOL WriteConsoleOutputCharacter(HANDLE hConsoleOutput, LPCTSTR lpCharacter, DWORD nLength,
                                     COORD dwWriteCoord, LPDWORD lpNumberOfCharsWritten);
                                     // 句柄// 字符串// 字符个数// 起始位置// 已写个数*/
填充字符属性
    BOOL FillConsoleOutputAttribute(HANDLE hConsoleOutput, WORD wAttribute,DWORD nLength,
                                   COORD dwWriteCoord, LPDWORD lpNumberOfAttrsWritten);
                                   //句柄, 文本属性, 个数, 开始位置, 返回填充的个数*/

// 设置代码页,
SetConsoleOutputCP(437);如(简体中文) 设置成936

3.光标操作控制

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    cout << "hello world!" << endl;

    //设置光标位置
    //SetConsoleCursorPosition(HANDLE hConsoleOutput,COORD dwCursorPosition);
    //设置光标信息
    //BOOL SetConsoleCursorInfo(HANDLE hConsoleOutput, PCONST PCONSOLE_CURSOR_INFO lpConsoleCursorInfo);
    //获取光标信息
    //BOOL GetConsoleCursorInfo(HANDLE hConsoleOutput,  PCONSOLE_CURSOR_INFO lpConsoleCursorInfo);
    //参数1:句柄;参数2:CONSOLE_CURSOR_INFO结构体{DWORD dwSize;(光标大小取值1-100)BOOL bVisible;(是否可见)}

    Sleep(2000);//延时函数
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD w = {0, 0};
    SetConsoleCursorPosition(hOut, w);
    CONSOLE_CURSOR_INFO cursorInfo = {1, FALSE};
    Sleep(2000);//延时函数
    SetConsoleCursorInfo(hOut, &cursorInfo);
    CloseHandle(hOut); // 关闭标准输出设备句柄
    return 0;
}

运转结果:

出口hello
world!后延时两秒,光标从第2、行移到行首,再2秒后光标隐藏不展现;

4.键盘操作控制

 

#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
HANDLE hOut;
//清除函数
void cle(COORD ClPos)
{
    SetConsoleCursorPosition(hOut, ClPos);
    cout << "            " << endl;
}
//打印函数
void prin(COORD PrPos)
{
    SetConsoleCursorPosition(hOut, PrPos);
    cout << "hello world!" << endl;
}
//移动函数
void Move(COORD *MoPos, int key)
{
    switch(key)
    {
    case 72: MoPos->Y--;break;
    case 75: MoPos->X--;break;
    case 77: MoPos->X++;break;
    case 80: MoPos->Y++;break;
    default: break;
    }
}

int main()
{
    cout << "用方向键移动下行输出内容" << endl;
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);//取句柄
    COORD CrPos = {0, 1};//保存光标信息
    prin(CrPos);//打印
    //等待键按下
    while(1)
    {
        if(kbhit())
        {
            cle(CrPos);//清除原有输出
            Move(&CrPos, getch());
            prin(CrPos);
        }
    }
    return 0;
}

 

运行结果:

图片 6

可以用方向键任意运动hello
world!

专注区分 getch();
getche(); getcher();函数

 

归纳案例贪吃蛇,推箱子,俄国四方(待续。。。)

相关文章

网站地图xml地图