【问题标题】:Is it possible to change font for an edit control without affecting the other lines?是否可以在不影响其他行的情况下更改编辑控件的字体?
【发布时间】:2018-04-23 01:53:07
【问题描述】:

您好,我想知道是否可以仅更改某些行的编辑控件的字体而不影响其余行:

在我的Edit control 中,我有一段文字,但我想要一些标题和标题以更大的字体和粗体显示,而其他行则使用较小的字体。

我试过SendMessage(hEdit, WM_SETFONT, (WPARAM)hfont, MAKELPARAM(0, true)); 但它将整个文本设置为传入的字体。

我认为SelectObject(hDcEdit, hFont); 有点搞砸了,但我不知道它是否正确以及如何。

【问题讨论】:

  • 没有。考虑一下 RichEdit。
  • @HansPassant:好的,非常感谢。我会读一些关于它的文件。

标签: c++ winapi fonts


【解决方案1】:

标准的Edit Control(想想,记事本)不支持您要查找的内容。整个文本只支持一种字体。

您正在寻找的是 RichEdit Control 代替(想想,写字板),特别是它的 EM_SETCHARFORMAT 消息,可用于将不同的格式(包括字体、颜色等)应用于文本的不同部分.

【讨论】:

    【解决方案2】:

    这不适用于默认的 Editcontrol,但您可以使用 Richeditcontrol

    #include <Windows.h>
    #include <CommCtrl.h>
    
    HINSTANCE relib = LoadLibrary("riched32.dll");
    if (relib == NULL) {
        MessageBox(NULL, "couldn't load richedit32.dll", "", MB_ICONEXCLAMATION);
    
    hEdit = CreateWindow(RICHEDIT_CLASS, "", WS_VISIBLE | WS_CHILD | ES_MULTILINE | 
    ES_AUTOHSCROLL | ES_AUTOVSCROLL | WS_VSCROLL | WS_HSCROLL, 0, 0, 200, 200, hWnd, NULL, 
    NULL, NULL);
    

    现在将字体设置为您的 Richeditcontrol 使用:

    CHARFORMAT2 cf;
    memset(&cf, 0, sizeof cf);
    cf.cbSize = sizeof cf;
    cf.dwMask = CFM_FACE;
    wsprintf(cf.szFaceName, "Arial"); //Here you can set the fontname you wont (C:/Windows/Fonts)
    SendMessage(hEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
    

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多