如何在C编程中改变控制台中的字体大小

这只能通过API实现:

作者:hi.baidu.com/console_app

测试环境:VC++ 6.0

控制台的字体大小可以更改。系统给我们提供了很多API,可以改变字体大小的API就隐藏在其中。网上没有关于主机字体大小的信息,主机字体大小教程由本博客独家发布。本文将教您如何使用这些API来修改控制台的字体大小。

通常,控制台中的每个输出缓冲区都有固定的字体。系统中的每种字体都有对应的序列号,每种字体都有不同的字号。如果要将其修改为新的字体,可以将该字体的序列号分配给控制台缓冲区。一般来说,系统中所有字体的总数不超过40,所以这可以作为循环获取信息时的上限。

首先,发布要使用的API列表:

(以下大部分API都没有公开,其中几个的细节是最近才公开的。)

Boolsetconsolefont (handle,dword)//注意,一旦调用这个函数,所有字符的字体大小都会改变,窗口大小也会改变。这用于设置字体大小。第一个参数是输出句柄,第二个参数是新的字体大小序列号。

Boolgetconsolefontinfo (handle,bool,dword,CONSOLE_FONT *)用于获取字体信息。第一个参数是输出句柄,第二个参数要设置为0,第三个参数是获取信息的字体号,第四个参数是指向console _ font结构的指针,API会把返回的信息放在这个结构中。

COORD getconsolefontsize (handle,dword)用于获取字体大小。第一个参数是输出句柄,第二个参数是获取大小的字体号,返回的coord的两个成员是字体大小。

DWORD GetNumberOfConsoleFonts()这个函数用于获取可用字体的数量,并返回可用字体的总数。

boolgetcurrentconsolefont(handle,bool,CONSOLE_FONT *)这个用来获取当前字体的信息。第一个参数是输出句柄,第二个参数应该设置为0,第三个参数是指向console _ font结构的指针,API会将返回的信息放在这个结构中。

结构控制台_FONT:

struct CONSOLE _ FONT { DWORD index坐标尺寸;};

第一个成员是字体的序列号,第二个成员是字体的大小

由于篇幅原因,每个API函数不一一讨论。有关其参数类型的对应含义,请参见其他文章。

首先,这些都是未发布的API,需要动态加载。首先,全局声明它们:

struct CONSOLE _ FONT { DWORD index坐标尺寸;};typedef BOOL(WINAPI * PROCSETCONSOLEFONT)(HANDLE,DWORD);typedef BOOL(WINAPI * PROCGETCONSOLEFONTINFO)(HANDLE,BOOL,DWORD,CONSOLE _ FONT *);typedef COORD(WINAPI * PROCGETCONSOLEFONTSIZE)(HANDLE,DWORD);typedef DWORD(WINAPI * PROCGETNUMBEROFCONSOLEFONTS)();typedef BOOL(WINAPI * PROCGETCURRENTCONSOLEFONT)(HANDLE,BOOL,CONSOLE _ FONT *);PROCSETCONSOLEFONT SetConsoleFont;PROCGETCONSOLEFONTINFO GetConsoleFontInfo;PROCGETCONSOLEFONTSIZE GetConsoleFontSize;PROCGETNUMBEROFCONSOLEFONTS GetNumberOfConsoleFonts;PROCGETCURRENTCONSOLEFONT

然后在程序启动时加载它:

h module hkernel 32 = GetModuleHandle(" kernel 32 ");SetConsoleFont =(PROCSETCONSOLEFONT)GetProcAddress(hkernel 32," SetConsoleFont ");GetConsoleFontInfo =(proctgetconsolefontinfo)GetProcAddress(hkernel 32," GetConsoleFontInfo ");GetConsoleFontSize =(PROCGETCONSOLEFONTSIZE)GetProcAddress(hkernel 32," GetConsoleFontSize ");GetNumberOfConsoleFonts =(PROCGETNUMBEROFCONSOLEFONTS)GetProcAddress(hkernel 32," GetNumberOfConsoleFonts ");GetCurrentConsoleFont =(PROCGETCURRENTCONSOLEFONT)GetProcAddress(hkernel 32," GetCurrentConsoleFont ");

加载后,可以通过编程来控制字体大小。