文字格式&在hwnd窗口中更改字体

时间:2014-05-05 21:09:13

标签: c++ windows winapi

我再说一遍,我已经设法了解到关于窗口创建和消息系统的大多数基础知识,现在我想问一下格式化,因为我没有设法在谷歌上找到关于我的特定情况的任何内容。 以下是目前的情况:

其中包含0的方框是静态窗口,因为我没有真正获得Rect绘图工作。我也需要它是动态的;这些框将显示一个int数组中的元素,我将它转移到wchar_t数组以进行输出。 现在是否可以更改字体,让我们说增加它并使其变为粗体?或者只能使用打印文本功能? 任何帮助都会非常感激,因为我真的想让这个“集中”可以这么说。

编辑: 另一个问题就是我不再发帖子了: 我刚刚注意到,在我更改数组中的值后,我的愚蠢的静态窗口不会更新,而是重新打印它们。例如。每个零都包含在wchar_t数组[16] [15]中;并且在我打印此设置并更改后,让我们说数组[13] [0] ='A';什么都没有发生,是因为静态窗口类型还是因为我是noobish并使用MoveWindow重新绘制它们XD?

1 个答案:

答案 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
);