如何以编程方式更改所选文本的字体/颜色?

时间:2019-06-09 23:36:37

标签: c winapi

我正在尝试制作一个自定义文本编辑器,该编辑器可以更改特定键入单词的字体和颜色。如何更改使用光标突出显示的文本的字体和/或颜色?

我还没有尝试做突出显示部分。我试图获取整个hEdit(HWND)区域并更改字体,但这似乎不起作用。

//In my WndProc (Being handled when I click the Format->Color menu item)
HWND hEdit;
hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);

DoSelectColor(hEdit);

//In my WndProc (Being handled when I click the Format->Font menu item)
HWND hEdit;
hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);

DoSelectFont(hEdit, hFont);

//Selecting Color
void DoSelectColor(HWND hwnd) {
    CHOOSECOLOR cc = {sizeof(CHOOSECOLOR)};
    cc.Flags = CC_RGBINIT | CC_FULLOPEN || CC_ANYCOLOR;
    cc.hwndOwner = hwnd;
    cc.rgbResult = g_rgbBackground;
    cc.lpCustColors = g_rgbCustom;

    if(ChooseColor(&cc)) {
        g_rgbBackground = cc.rgbResult;
    }
}

//Selecting Font
void DoSelectFont(HWND hwnd, HFONT f) {
    CHOOSEFONT cf = {sizeof(CHOOSEFONT)};
    LOGFONT lf;

    GetObject(f, sizeof(LOGFONT), &lf);

    cf.Flags = CF_EFFECTS | CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
    cf.hwndOwner = hwnd;
    cf.lpLogFont = &lf;

    if(ChooseFont(&cf)) {
        HFONT hf = CreateFontIndirect(&lf);
        if(hf) {
            f = hf;
        }
    }
}

我想更改hEdit区域,但是我对C / C ++还是很陌生,似乎无法弄清楚为什么它没有改变hEdit区域的颜色。

1 个答案:

答案 0 :(得分:1)

正如正面评论中指出的那样。您将无法直接通过Edit Control来做到这一点。您要使用的是Richedit Control。您可能需要做的是首先致电SendMessage(hWndRichEdit, EM_SETEDITSTYLE, SES_EMULATESYSEDIT, SES_EMULATESYSEDIT);在创建WM_CREATE之后在Richedit Control处理程序中添加任何样式的文本,请使用:SETTEXTEX stex = { ST_SELECTION, CP_ACP }; SendMessage(hWndRichEdit, EM_SETTEXTEX, &stex, (LPARAM)"{\rtf1 Inserting {\b bold} text. \par }");

以下一些链接可以为您提供帮助。

您要使用Richedit Control的版本2或版本3。

不仅要复制和粘贴代码。在尝试实施之前,请完整阅读这些页面。

MSDN:Rich Edit

MSDN:About Rich Edit Controls

MSDN:Using Rich Edit Controls

维基百科:Rich Text Format