如何为Windows控制台选择光栅字体?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为Windows控制台选择光栅字体?相关的知识,希望对你有一定的参考价值。

我想从控制台中选择Raster字体,这样我就可以在控制台中拥有8x8像素大的“Pixel like”字符。这是因为我编写了一个控制台游戏引擎,现在我希望它看起来更好。

这是我更改字体和大小的代码:

import ctypes

LF_FACESIZE = 32
STD_OUTPUT_HANDLE = -11

class COORD(ctypes.Structure):
    _fields_ = [("X", ctypes.c_short), ("Y", ctypes.c_short)]

class CONSOLE_FONT_INFOEX(ctypes.Structure):
    _fields_ = [("cbSize", ctypes.c_ulong),
                ("nFont", ctypes.c_ulong),
                ("dwFontSize", COORD),
                ("FontFamily", ctypes.c_uint),
                ("FontWeight", ctypes.c_uint),
                ("FaceName", ctypes.c_wchar * LF_FACESIZE)]

font = CONSOLE_FONT_INFOEX()
font.cbSize = ctypes.sizeof(CONSOLE_FONT_INFOEX)
font.nFont = 12
font.dwFontSize.X = 11
font.dwFontSize.Y = 18
font.FontFamily = 54
font.FontWeight = 400
font.FaceName = "Lucida Console"

handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
ctypes.windll.kernel32.SetCurrentConsoleFontEx(
        handle, ctypes.c_long(False), ctypes.pointer(font))
答案

找到正确的字体名称,使每个字符8乘8大:

import ctypes

LF_FACESIZE = 32
STD_OUTPUT_HANDLE = -11

class COORD(ctypes.Structure):
    _fields_ = [("X", ctypes.c_short), ("Y", ctypes.c_short)]

class CONSOLE_FONT_INFOEX(ctypes.Structure):
    _fields_ = [("cbSize", ctypes.c_ulong),
                ("nFont", ctypes.c_ulong),
                ("dwFontSize", COORD),
                ("FontFamily", ctypes.c_uint),
                ("FontWeight", ctypes.c_uint),
                ("FaceName", ctypes.c_wchar * LF_FACESIZE)]

font = CONSOLE_FONT_INFOEX()
font.cbSize = ctypes.sizeof(CONSOLE_FONT_INFOEX)
font.nFont = 8
font.dwFontSize.X = 8
font.dwFontSize.Y = 8
font.FontFamily = 8
font.FontWeight = 8
font.FaceName = "Terminal"

handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
ctypes.windll.kernel32.SetCurrentConsoleFontEx(
        handle, ctypes.c_long(False), ctypes.pointer(font))

以上是关于如何为Windows控制台选择光栅字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何为外部字体请求设置 AWS Cloudfront 缓存?

如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?

tkinter - 如何为文本设置字体?

如何为 UILabel 字体更改设置动画?

Android - 如何为整个应用程序设置自定义字体[重复]

为啥保守光栅化无法为某些三角形调用片段着色器?