VS2015控制台中获取和修改当前字体大小(2-1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hou09tian/article/details/85336528

在VS2015中,可以通过API函数获取和设置VS2015控制台窗口字体的大小。在获取或设置控制台窗口字体大小之前,需要获取控制台窗口的句柄。

1 获取控制台窗口句柄

可以通过GetStdHandle()函数获取控制台输出窗口的句柄。该函数的格式为

HANDLE WINAPI GetStdHandle(DWORD nStdHandle );

GetStdHandle()函数的作用是获取指定的标准设备(包括输入设备、输出设备或者显示错误的设备)的句柄。该函数的参数指定了要获取句柄的标准设备,返回值是指定标准设备的句柄。

获取控制台输出窗口句柄的代码如下所示。

HANDLE handle_console = GetStdHandle(STD_OUTPUT_HANDLE);

if( INVALID_HANDLE_VALUE == handle_console)

{

return false;

}

其中,GetStdHandle()函数的参数STD_OUTPUT_HANDLE指定了要获取的标准设备是控制台输出窗口的句柄。如果函数执行成功,则变量handle_console保存了获取到的窗口句柄,否则,handle_console的值是INVALID_HANDLE_VALUE。

2获取当前字体的大小

在获取了控制台输出窗口句柄之后,可以通过GetCurrentConsoleFont()函数或者GetConsoleFontSize()函数获取当前字体大小。

2.1 GetCurrentConsoleFont()函数

2.1.1 函数介绍

GetCurrentConsoleFont()函数的作用是获取当前控制台字体的信息。该函数的格式是

BOOL WINAPI

GetCurrentConsoleFont(

HANDLE  hConsoleOutput

, BOOL bMaximumWindow

, PCONSOLE_FONT_INFO lpConsoleCurrentFont

);

其中,参数hConsoleOutput是控制台输出窗口的句柄;bMaximumWindow的值是TRUE时,表示获取窗口最大化时字体的信息,bMaximumWindow的值是TRUE时,表示获取当前窗口字体的信息;lpConsoleCurrentFont是CONSOLE_FONT_INFO结构的指针,保存了要获取字体的信息。

2.1.2 CONSOLE_FONT_INFO结构

CONSOLE_FONT_INFO结构包含了控制台字体的信息。该结构定义如下

typedef struct _CONSOLE_FONT_INFO {

 DWORD nFont;

COORD dwFontSize; } CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;

其中,nFont是当前控制台字体在系统控制台字体表中的索引;dwFontSize是COORD结构的对象,保存了当前控制台字体的字符的宽度和高度。

相关链接:

COORD结构,该结构定义了控制台屏幕缓冲区中的字符单元(character cell)的坐标,定义如下所示。

typedef struct _COORD

{

SHORT X;

SHORT Y;

} COORD, *PCOORD;

其中,x和y分表表示横坐标和纵坐标。

2.1.3 相关代码

通过GetCurrentConsoleFont()函数获取当前控制台字体的代码如下

HANDLE hOutput;

hOutput = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_FONT_INFO consoleCurrentFont;

GetCurrentConsoleFont(hOutput, FALSE, &consoleCurrentFont);

printf("通过GetCurrentConsoleFont()函数获取到的控制台当前字体长度是%d, 高度是%d.\n"

, consoleCurrentFont.dwFontSize.X

, consoleCurrentFont.dwFontSize.Y

);

其中,hOutput是控制台输出窗口的句柄,获取到的字体宽度和高度保存在consoleCurrentFont中。输出的效果如图1所示。

图1 通过GetCurrentConsoleFont()函数获取到的字体信息

猜你喜欢

转载自blog.csdn.net/hou09tian/article/details/85336528