是否可以更改编辑控件的字体而不影响其他行?

时间:2017-11-09 22:17:17

标签: c++ winapi fonts

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

在我的Edit control我有一个文字,但我想要一些标题和标题用更大的字体和粗体,而其他行用更小的字体。

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

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

2 个答案:

答案 0 :(得分:4)

标准Edit Control(想想,记事本)不支持你要找的东西。它只支持整个文本的一个字体。

你要找的是RichEdit Control而不是(想想,写字板),特别是它的EM_SETCHARFORMAT消息,它可用于应用不同的格式(包括字体,颜色等)文本的不同部分。

答案 1 :(得分:0)

这不适用于默认的 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);