我正在尝试制作一个自定义文本编辑器,该编辑器可以更改特定键入单词的字体和颜色。如何更改使用光标突出显示的文本的字体和/或颜色?
我还没有尝试做突出显示部分。我试图获取整个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区域的颜色。
答案 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
维基百科:Rich Text Format