C++ 文本格式&;在hwnd窗口中更改字体
再说一遍,伙计们,到目前为止,我一直在努力学习有关窗口创建和消息系统的最基本知识,现在我想问一下格式问题,因为我没有在谷歌上找到关于我的特殊案例的任何信息。 以下是目前为止的情况: 其中包含0的框是静态窗口,因为我没有真正获得Rect绘制作业。我也需要它是动态的;这些框将显示一个int数组中的元素,我将把它传输到wchar\u t数组进行输出。 现在是否可以更改字体,比如说增加字体并使其加粗?还是只能使用打印文本功能? 任何帮助都将不胜感激,因为我真的试图让这个“中心”可以这么说 编辑: 另一个问题,我不想再发帖子了:C++ 文本格式&;在hwnd窗口中更改字体,c++,windows,winapi,C++,Windows,Winapi,再说一遍,伙计们,到目前为止,我一直在努力学习有关窗口创建和消息系统的最基本知识,现在我想问一下格式问题,因为我没有在谷歌上找到关于我的特殊案例的任何信息。 以下是目前为止的情况: 其中包含0的框是静态窗口,因为我没有真正获得Rect绘制作业。我也需要它是动态的;这些框将显示一个int数组中的元素,我将把它传输到wchar\u t数组进行输出。 现在是否可以更改字体,比如说增加字体并使其加粗?还是只能使用打印文本功能? 任何帮助都将不胜感激,因为我真的试图让这个“中心”可以这么说 编辑: 另
我只是注意到我愚蠢的静态窗口在我改变数组中的值并重新绘制它们之后不会更新。例如,wchar_t数组[16][15]中包含每个零;在我打印这个设置并更改之后,让我们说array[13][0]='A';什么也没有发生,是因为静态窗口类型,还是因为我是noobish并使用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
);
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
);
如果我在那之后重新画窗户呢?字体将返回默认值还是保持我创建它的方式?它将一直保持,直到另一个
WM_SETFONT
被发送。如果在此之后我重新绘制窗口会怎么样?字体将返回默认值还是保持我创建它的方式?它将一直保持,直到发送另一个WM_SETFONT
。