Я пытаюсь создать собственный текстовый редактор, который может изменять шрифт и цвет определенных набранных слов. Как изменить шрифт и/или цвет текста, который я выделяю с помощью курсора?
Я еще не пробовал делать выделение. Я попытался получить всю область 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.
На самом деле возврат был, когда я изменил VOID на HFONT. Я просто забыл избавиться от возврата, когда способ, которым я пытался, не сработал, поэтому я изменил его обратно на void.
Документация может помочь. docs.microsoft.com/en-us/windows/desktop/dlgbox/… Есть несколько примеров.
Ничто в этом коде не меняет цвет/шрифт hEdit. А для многоцветного управления используйте RichEdit (EM_SETCHARFORMAT)
Стандартный элемент управления редактированием не поддерживает форматирование, кроме установки одного цвета, цвета фона и шрифта для всего содержимого. Он не поддерживает форматирование частей своего содержимого.





Как указано в положительном комментарии. Вы не сможете сделать это напрямую с помощью 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 }");
Вот несколько ссылок, которые должны вам помочь.
Вы хотите использовать версию 2 или 3 Richedit Control.
Не просто копируйте и вставляйте код. Прочтите эти страницы полностью, прежде чем пытаться реализовать их.
MSDN: Богатое редактирование
MSDN: Об элементах управления Rich Edit
MSDN: Использование расширенных элементов управления редактированием
Википедия: Расширенный текстовый формат
Похоже, этот код работает, но вы возвращаете значение из функции, тип возвращаемого значения которой —
void, поэтому я не понимаю, почему она вообще будет работать.