在VS2015中,可以通过API函数获取和设置VS2015控制台窗口字体的大小。在获取或设置控制台窗口字体大小之前,需要获取控制台窗口的句柄。
可以通过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。
在获取了控制台输出窗口句柄之后,可以通过GetCurrentConsoleFont()函数或者GetConsoleFontSize()函数获取当前字体大小。
GetCurrentConsoleFont()函数的作用是获取当前控制台字体的信息。该函数的格式是
BOOL WINAPI
GetCurrentConsoleFont(
HANDLE hConsoleOutput
, BOOL bMaximumWindow
, PCONSOLE_FONT_INFO lpConsoleCurrentFont
);
其中,参数hConsoleOutput是控制台输出窗口的句柄;bMaximumWindow的值是TRUE时,表示获取窗口最大化时字体的信息,bMaximumWindow的值是TRUE时,表示获取当前窗口字体的信息;lpConsoleCurrentFont是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分表表示横坐标和纵坐标。
通过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()函数获取到的字体信息