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

测试结果:

宝剑锋从磨砺出,梅花香自苦寒来。
原文地址:https://www.cnblogs.com/szitcast/p/10923499.html