Как изменить цвет выделения в элементе управления RichEdit? - PullRequest
4 голосов
/ 05 мая 2011

По сути, я хочу изменить стандартный цвет выделения RichEdit в местах, где он находится над цветным текстом.

Я реализую функцию «подсветки» в элементе управления RichEdit (например, желтый маркер). Теперь, когда я применяю подсветку к выделенному тексту, ничего не меняется визуально, потому что выделение остается на месте и переопределяет цвет символа. Это плохо, потому что пользователь должен получить визуальную обратную связь о том, что выделение применено.

Теперь я согласился на компромисс - после выполнения команды «выделить», я просто полностью очищаю выбор. Но было бы идеально иметь другой цвет выделения, когда он находится над цветным текстом.

Как я могу это сделать? Заранее спасибо!

Ответы [ 5 ]

4 голосов
/ 21 мая 2011

Настройка цвета для выделения текста привязана к цвету выбора системы в RichEdit 2.0 и выше . В RichEdit 1.0 цвет выделения генерируется путем инвертирования цвета фона , поэтому у вас есть некоторый контроль, но вы потеряете много функций, если вы снизите до 1,0.

Обходной путь заключается в установке всего процесса Хук обхода в API GetSysColor.

В WPF4-версии RichTextBox имеется свойство SelectionBrush, которое можно использовать для изменения внешнего вида выделения. Не уверен, позволяет ли требование вашего проекта разместить в вашем диалоговом окне элемент управления WPF.

2 голосов
/ 14 мая 2011

Я не думаю, что это может быть сделано автоматически, потому что расширенный контроль редактирования из Windows не обеспечивает такую ​​функциональность. У вас есть 2 варианта:

  • Игнорировать проблему. То, что ты хочешь, невозможно, поэтому не желай этого.
  • Создайте свой собственный элемент управления редактирования (просто шутка, но это можно сделать). Или используйте какой-нибудь другой. Может быть, scintilla control обладает такой функциональностью?
1 голос
/ 21 мая 2011

Теперь я согласился на компромисс - после выполнения команды «выделить», я просто полностью отменил выделение

Я просто хотел добавить, что даже Microsoft Word отменяет выделение текстакогда вы выделяете определенный цвет / цвет.Начиная играть, это кажется наиболее интуитивным, потому что обычно вы все равно больше не хотите ничего делать, и вы просто отмените выбор текста сразу.

1 голос
/ 19 мая 2011

Приложение для быстрого тестирования, и мне удалось изменить эти цвета, однако для того, чтобы оно работало так, как вы ожидаете, требуется некоторое тщательное рассмотрение.

Во-первых, вам, вероятно, придется изменить свой диалоговый ресурс, чтобы определитьконтролировать, как старший RICHEDIT.В Visual Studio 2010 для файла .rc, сгенерированного в моем диалоговом окне, элемент управления был идентифицирован как "RichEditCtrl20A, и когда элемент управления был идентифицирован как таковой, я не смог внести существенных изменений в цвет выделения.Изменение типа элемента управления на "RICHEDIT" позволило мне внести изменения в выделение цвета без видимой потери функциональности.Вы должны изменить файл .rc в текстовом редакторе, найти свой экземпляр элемента управления RichEdit и внести изменения.

Как только это будет сделано, вы можете изменить цвет выделения (фактически, значительно больше атрибутов выделения) с помощьюCRichEditCtrl::SetSelectionCharFormat function.

Простым тестом, который я сделал, было создание нового приложения MFC на основе диалога, добавление к нему элемента управления rich edit, изменение файла RC, как описано выше, и добавление следующего обработчика OnOK ():

void CTestMFCDlg::OnBnClickedOk()
{
   m_rec.SetWindowText("This is a test of stuff");

   m_rec.SetFocus();

   CHARRANGE cr;
   cr.cpMin = 0;
   cr.cpMax = 16;

   m_rec.SetSel(cr);

   CHARFORMAT2A cf;
   m_rec.GetSelectionCharFormat(cf);

   cf.dwEffects = 0;
   cf.dwMask = CFM_BACKCOLOR | CFM_COLOR | CFM_FACE;
   cf.crBackColor = 0;
   cf.crTextColor = RGB(15, 15, 255);
   strcpy(cf.szFaceName, "Times New Roman");

   m_rec.SetSelectionCharFormat(cf);
}

Как только этот обработчик будет установлен, нажатие OK в диалоговом окне заполнит элемент управления rich edit, выделит первые 17 символов и изменит цвет выделения выделения.

Вы можете найтидокументация по этой функции в MSDN:

0 голосов
/ 16 мая 2011

Хотя я не мог правильно понять ваш вопрос, я полагаю, вы хотите изменить цвет выделенного текста.Следующие ссылки находятся в MFC, поэтому вам нужно изменить его на код Windows SDK, но он поможет вам начать работу.

http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/860b0295-9144-4af6-9ffc-42c2b39a3f50/

http://www.go4expert.com/forums/showthread.php?t=320

Пожалуйста, дайте мне знать, если мой ответ помог вам.

РЕДАКТИРОВАТЬ

Изменение цвета в элементе управления Rich Edit

...