控制台设置字体的大小,网上找得自己还没来的及实现

【 VC++ 】 控制台字体大小相关操作
2009-08-26 23:44

——————— 【 转载请保留 】 ———————

作者:Defanive
博客:Console.Dec.Cn(Hi.Baidu.Com/Console_App)

——————— 【 谢谢合作 】 ———————

类型:原创
时间:10.04.04
测试环境:VC++ 6.0

网友说,既然能改变控制台的颜色,为什么不能改变控制台的字体大小呢?答案是肯定的。系统为我们提供了许多的API,能更改字体大小的API正隐身其中。网上没有控制台字体大小的相关资料,关于控制台字体大小的教程是本博客独家放出。本文将教会你如何使用这些API,达到修改控制台字体大小的目的。

一般控制台中每个输出缓冲区都有一个固定的字体。系统中的字体,每一种都有对应的序号,每种字体大小不同。想要修改为一种新的字体,就将这种字体的序号赋值给控制台缓冲区即可。一般来说,系统所有的字体总数不超过40个,因此循环获取信息时可以以这个为上限。

首先放出需要用到的API列表:

(如下大部分API都没有公布,至最近才公布了其中几个的详细信息)

bool SetConsoleFont(HANDLE,DWORD)
这个是用于设置字体大小
第一个参数为输出句柄,第二个参数为新字体大小序号

bool GetConsoleFontInfo(HANDLE,BOOL,DWORD,CONSOLE_FONT*)
这个是用于获取字体信息
第一个参数为输出句柄,第二个参数应设为0,第三个参数为欲获取信息的字体序号,第四个参数为CONSOLE_FONT结构体的指针,API将返回的信息放置在这个结构体里

COORD GetConsoleFontSize(HANDLE,DWORD)
这个是用于获取字体大小
第一个参数为输出句柄,第二个参数为欲获取大小的字体序号,返回的COORD的两个成员就是字体的大小

DWORD GetNumberOfConsoleFonts()
这个是用于获取可用字体数
返回可用字体总数

bool GetCurrentConsoleFont(HANDLE,BOOL,CONSOLE_FONT*)
这个是用于获取当前字体的信息
第一个参数为输出句柄,第二个参数应设为0,第三个参数为CONSOLE_FONT结构体的指针,API将返回的信息放置在这个结构体里

结构体CONSOLE_FONT:

struct CONSOLE_FONT
{
DWORD index;
COORD dim;
};

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

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

首先,这是些未公布的API,所以需要动态载入,首先在全局声明:

struct CONSOLE_FONT
{
DWORD index;
COORD dim;
};

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 GetCurrentConsoleFont;

然后在程序启动的时候进行载入:

HMODULE hKernel32 = GetModuleHandle("kernel32");
SetConsoleFont = (PROCSETCONSOLEFONT)GetProcAddress(hKernel32,"SetConsoleFont");
GetConsoleFontInfo = (PROCGETCONSOLEFONTINFO)GetProcAddress(hKernel32,"GetConsoleFontInfo");
GetConsoleFontSize = (PROCGETCONSOLEFONTSIZE)GetProcAddress(hKernel32,"GetConsoleFontSize");
GetNumberOfConsoleFonts = (PROCGETNUMBEROFCONSOLEFONTS)GetProcAddress(hKernel32,"GetNumberOfConsoleFonts");
GetCurrentConsoleFont = (PROCGETCURRENTCONSOLEFONT)GetProcAddress(hKernel32,"GetCurrentConsoleFont");

载入完毕之后,就可以进行编程对字体大小控制了。

——————— 【 转载请保留 】 ———————

作者:Defanive
博客:Console.Dec.Cn(Hi.Baidu.Com/Console_App)

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值