【问题标题】:Text formatting & font changing in hwnd windowshwnd 窗口中的文本格式和字体更改
【发布时间】:2014-06-22 07:31:11
【问题描述】:

伙计们,到目前为止,我已经设法了解了有关窗口创建和消息系统的大多数基础知识,现在我想询问有关格式的问题,因为我没有设法在 google 上找到有关我的特定案例的任何信息。 到目前为止,它是这样的:

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

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

【问题讨论】:

    标签: c++ windows winapi


    【解决方案1】:

    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被发送。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    相关资源
    最近更新 更多