• 【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
    ", cursorInfo.dwSize, cursorInfo.bVisible);
    
    
    	//关闭句柄
    	CloseHandle(hOut);
    
    	system("pause");
    	return 0;
    }
    

    执行结果

    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
    ", 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;
    }
    

    执行结果

    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;
    }
    

    测试结果:

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    mtk lk阶段的lcm流程
    MTK touchscreen 流程
    MTK DDR调试
    增加,删除GMS包
    最大最小背光亮度修改
    HDMI 8193 配置
    mtk6737t摄像头配置文件的编译
    camera调试命令
    Linux 终端显示 Git 当前所在分支
    ubuntu系统,关于源(source)的配置
  • 原文地址:https://www.cnblogs.com/szitcast/p/10923499.html
Copyright © 2020-2023  润新知