Как программно изменить выбранный шрифт / цвет текста? - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь создать собственный текстовый редактор, который может изменять шрифт и цвет определенных напечатанных слов.Как мне изменить шрифт и / или цвет текста, который я выделяю с помощью курсора?

Я еще не пытался выделить часть выделения.Я попытался получить всю область 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 Ответ

1 голос
/ 10 июня 2019

Как указано в положительном комментарии. Вы не сможете сделать это напрямую с 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: Rich Edit

MSDN: Об элементах управления Rich Edit

MSDN: Использование элементов управления Rich Edit

Википедия: Rich Text Format

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...