【C语言】控制台窗口图形界面编程(六):光标设置

00. 目录

01. CONSOLE_CURSOR_INFO结构

包含有关控制台光标的信息。

typedef struct _CONSOLE_CURSOR_INFO {
  DWORD dwSize;
  BOOL  bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

dwSize
光标填充的字符单元格的百分比。该值介于1和100之间。光标外观会发生变化,从完全填充单元格到显示为单元格底部的水平线。

注意 虽然dwSize值通常介于1和100之间,但在某些情况下,可能会返回该范围之外的值。例如,如果在注册表中将CursorSize设置为0,则返回的dwSize值将为0。

bVisible
光标的可见性。如果光标可见,则此成员为TRUE

02. GetConsoleCursorInfo函数

获取有关指定控制台屏幕缓冲区的光标大小和可见性的信息。

类型声明

BOOL WINAPI GetConsoleCursorInfo(
  _In_  HANDLE               hConsoleOutput,
  _Out_ PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
);

功能:
    获取光标相关信息
参数:
    hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_READ访问权限。
    lpConsoleCursorInfo 指向CONSOLE_CURSOR_INFO结构的指针,该结构接收有关控制台游标的信息。

返回值:
    如果函数成功,则返回值为非零值。
    如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。

参考程序

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#include <Windows.h>
#include <conio.h>


int main(void)
{
    //定义句柄变量
    HANDLE hOut = NULL;

    //光标信息变量
    CONSOLE_CURSOR_INFO cursorInfo;

    //获取标准输出句柄
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    //获取当前光标信息
    GetConsoleCursorInfo(hOut, &cursorInfo);

    printf("光标默认大小: %d 光标是否可见: %d\n", cursorInfo.dwSize, cursorInfo.bVisible);


    //关闭句柄
    CloseHandle(hOut);

    system("pause");
    return 0;
}

执行结果
1697806-20190525184718666-841962334.png

03. SetConsoleCursorInfo函数

设置指定控制台屏幕缓冲区的光标大小和可见性。

函数声明:

BOOL WINAPI SetConsoleCursorInfo(
  _In_       HANDLE              hConsoleOutput,
  _In_ const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
);
功能:
    设置光标的属性
参数:
    hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_READ访问权限。
    lpConsoleCursorInfo 指向CONSOLE_CURSOR_INFO结构的指针,该结构为控制台屏幕缓冲区的游标提供新规范。

返回值:
    如果函数成功,则返回值为非零值。
    如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。

参考程序

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#include <Windows.h>
#include <conio.h>


int main(void)
{
    //定义句柄变量
    HANDLE hOut = NULL;

    //光标信息变量
    CONSOLE_CURSOR_INFO cursorInfo;

    //获取标准输出句柄
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    //获取当前光标信息
    GetConsoleCursorInfo(hOut, &cursorInfo);
    printf("光标默认大小: %d 光标是否可见: %d\n", cursorInfo.dwSize, cursorInfo.bVisible);

    getchar();
    //设置光标的尺寸为20
    cursorInfo.dwSize = 5;
    SetConsoleCursorInfo(hOut, &cursorInfo);

    getchar();

    //设置光标的尺寸为50
    cursorInfo.dwSize = 50;
    SetConsoleCursorInfo(hOut, &cursorInfo);

    getchar();

    //设置光标的尺寸为100
    cursorInfo.dwSize = 100;
    SetConsoleCursorInfo(hOut, &cursorInfo);

    getchar();

    //设置光标不可见
    cursorInfo.dwSize = 25;
    cursorInfo.bVisible = 0;
    SetConsoleCursorInfo(hOut, &cursorInfo);

    getchar();

    //关闭句柄
    CloseHandle(hOut);

    system("pause");
    return 0;
}

执行结果

1697806-20190525184728485-1158680471.gif

04. SetConsoleCursorPosition函数

设置指定控制台屏幕缓冲区中的光标位置。

函数声明:

BOOL WINAPI SetConsoleCursorPosition(
  _In_ HANDLE hConsoleOutput,
  _In_ COORD  dwCursorPosition
);

功能:
    设置光标的位置
    
参数:
    hConsoleOutput 控制台屏幕缓冲区的句柄。句柄必须具有GENERIC_READ访问权限。
    dwCursorPosition 用于指定新的光标位置(以字符为单位)。坐标是屏幕缓冲区字符单元格的列和行。坐标必须位于控制台屏幕缓冲区的边界内。
    
返回值:
    如果函数成功,则返回值为非零值。
    如果函数失败,则返回值为零。要获取扩展错误信息,请调用GetLastError。

参考程序;

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#include <Windows.h>
#include <conio.h>


int main(void)
{
    //定义句柄变量
    HANDLE hOut = NULL;

    COORD pos;

    //获取标准输出句柄
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    pos.X = 8;
    pos.Y = 8;
    //设置光标的位置
    SetConsoleCursorPosition(hOut, pos);
    printf("hello itcast1");

    pos.X = 18;
    pos.Y = 16;
    //设置光标的位置
    SetConsoleCursorPosition(hOut, pos);
    printf("hello itcast2");


    //关闭句柄
    CloseHandle(hOut);

    system("pause");
    return 0;
}

测试结果:

1697806-20190525184740220-295436324.png

转载于:https://www.cnblogs.com/szitcast/p/10923499.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值