我再说一遍,我已经设法了解到关于窗口创建和消息系统的大多数基础知识,现在我想问一下格式化,因为我没有设法在谷歌上找到关于我的特定情况的任何内容。 以下是目前的情况:
其中包含0的方框是静态窗口,因为我没有真正获得Rect绘图工作。我也需要它是动态的;这些框将显示一个int数组中的元素,我将它转移到wchar_t数组以进行输出。 现在是否可以更改字体,让我们说增加它并使其变为粗体?或者只能使用打印文本功能? 任何帮助都会非常感激,因为我真的想让这个“集中”可以这么说。
编辑: 另一个问题就是我不再发帖子了: 我刚刚注意到,在我更改数组中的值后,我的愚蠢的静态窗口不会更新,而是重新打印它们。例如。每个零都包含在wchar_t数组[16] [15]中;并且在我打印此设置并更改后,让我们说数组[13] [0] ='A';什么都没有发生,是因为静态窗口类型还是因为我是noobish并使用MoveWindow重新绘制它们XD?
答案 0 :(得分:4)
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
);