光标设置
利用SetConsoleCursorPosition函数可以达到设置光标位置的目的
函数原型
BOOL SetConsoleCursorPosition(HANDLE hOut,COORD pos);
参数
- hOut
目标窗口的句柄 - pos
pos 是一个 COOND 类型的结构体变量,结构体原型在文章末尾或有介绍。本参数的作用是传入一个坐标,就是你希望光标所在的坐标。
返回值
成功返回1,失败返回0;
窗口大小设置
窗口大小的设置涉及到了SetConsoleWindowInfo和SetConsoleScreenBufferSize这两个函数
SetConsoleWindowInfo 函数的作用是设置控制台窗口的大小
函数原型
BOOL WINAPI SetConsoleWindowInfo(
_In_ HANDLE hOut,
_In_ BOOL bAbsolute,
_In_ const SMALL_RECT *lpConsoleWindow
);
参数
- hOut
控制台屏幕缓冲区的句柄。 - bAbsolute
该参数一般为TRUE。 - lpConsoleWindow
指向 SMALL_RECT 结构体的指针,指定窗口在屏幕缓冲区的左上角和右下角位置。
返回值
如果函数操作成功,返回值为非零值。否则返回值为零。
SetConsoleScreenBufferSize 函数的作用是设置控制台窗口缓冲区的大小
函数原型
BOOL WINAPI SetConsoleScreenBufferSize(
__in HANDLE hOut,
__in COORD pos
);
参数
- hOut
控制台屏幕缓冲区的句柄。该句柄必须具有的 GENERIC_READ 的访问权限。 - pos
一个COORD结构体变量,指定新的控制台屏幕缓冲区的大小,以 字符列和行为单位。指定的宽度和高度不能小于控制台屏幕缓冲区窗口的宽度和高度。
返回值
如果函数操作成功,返回值为非零值。否则返回值为零。
注:如果设置的控制台窗口尺寸小于缓冲区尺寸,则会出现滚动条;如果刚刚好,就不会出现滚动条。另:如果 SetConsoleScreenBufferSize 函数在 SetConsoleWindowInfo 之前调用,则 SetConsoleScreenBufferSize 函数就会调用失败!
附结构体
typedef struct _COORD
{
SHORT X; //横坐标
SHORT Y; //纵坐标
}COORD;
typedef struct _SMALL_RECT
{
SHORT Left;
SHORT Top; //窗口左上角坐标
SHORT Right;
SHORT Bottom;//窗口右下角
}SMALL_RECT;
举个栗子
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
void Goto(short x, short y) //设置光标位置
{
COORD pos = {x, y};
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void SetSize(short x, short y) // 设置同样的缓冲区和窗口大小,不会出现滚动条
{
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = {x, y};
SMALL_RECT rc = {0, 0, x-1, y-1};
SetConsoleWindowInfo(hOut, true, &rc);
SetConsoleScreenBufferSize(hOut, pos);
}
int main()
{
SetSize(60, 30);
Goto(18,14);
printf("设置完毕!尺寸大小:60*30!\n");
Goto(0,0);
system("pause");
return 0;
}