gpt4 book ai didi

c++ - hwnd 窗口中的文本格式和字体更改

转载 作者:行者123 更新时间:2023-11-27 23:06:04 27 4
gpt4 key购买 nike

我又是伙计们,到目前为止,我已经设法学习了有关窗口创建和消息系统的大多数基础知识,现在我想问一下格式化,因为我没有设法在谷歌上找到任何关于我的特殊情况的信息。这是到目前为止的样子:

其中带有 0 的框是静态窗口,因为我没有真正完成 Rect 绘制工作。我还需要它是动态的;这些框将显示 int 数组中的一个元素,我会将其传输到 wchar_t 数组以进行输出。现在是否可以更改字体,比如增加字体并使其变为粗体?还是只能使用打印文本功能?任何帮助将不胜感激,因为我真的试图让这个“居中”可以这么说。

编辑:另一个问题,所以我不会再发一个帖子:我只是注意到,在我更改正在打印的数组中的值并重新绘制它们后,我愚蠢的静态窗口不会更新。例如。每个零都包含在 wchar_t array[16][15] 中;在我打印此设置并更改后,让我们说 array[13][0] = 'A';没有任何反应,是由于静态窗口类型还是因为我是菜鸟并使用 MoveWindow 重新绘制它们 XD?

最佳答案

Windows 消息 WM_SETFONT 将执行此操作。首先应该创建一个字体,然后在 WM_SETFONT 的参数中使用它。创建字体和窗口后,使用

SendMessage(wnd, WM_SETFONT, (WPARAM)font, FALSE);

设置窗口的默认字体。

如果你想使用默认的 windows 字体,你可以像这样创建一个:

HFONT font = NULL;
NONCLIENTMETRICS ncm;
memset(&ncm, 0, sizeof(NONCLIENTMETRICS));
ncm.cbSize = sizeof(NONCLIENTMETRICS);
if(SystemParametersInfo(SPI_GETNONCLIENTMETRICS,
sizeof(NONCLIENTMETRICS), &ncm, 0)) {
font = CreateFontIndirect(&ncm.lfMessageFont);
}

NONCLIENTMETRICS 中还有其他您可以使用的默认字体。当然你也可以根据字体名称和其他信息创建字体,但不能保证不同系统上都有这样的字体。

HFONT CreateFont(
int nHeight, // height of font
int nWidth, // average character width
int nEscapement, // angle of escapement
int nOrientation, // base-line orientation angle
int fnWeight, // font weight
DWORD fdwItalic, // italic attribute option
DWORD fdwUnderline, // underline attribute option
DWORD fdwStrikeOut, // strikeout attribute option
DWORD fdwCharSet, // character set identifier
DWORD fdwOutputPrecision, // output precision
DWORD fdwClipPrecision, // clipping precision
DWORD fdwQuality, // output quality
DWORD fdwPitchAndFamily, // pitch and family
LPCTSTR lpszFace // typeface name
);

关于c++ - hwnd 窗口中的文本格式和字体更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481934/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com