2016-09-18 3 views
-1

У меня есть элемент управления только для чтения, который отображает многострочную строку. Я установил для него цвет фона, используя WM_CTLCOLORSTATIC в процедуре окна диалога, из которого мой элемент подкласса. Если окно уменьшено, появится окно scrolllbar для элемента управления Edit. Все работает отлично, вы можете выбирать, копировать, прокручивать текст влево и вправо.WinAPI: рисовать прямоугольники позади Редактировать Текст управления

case WM_CTLCOLORSTATIC: 
     if ((HWND)lParam == GetDlgItem(hwndDlg, IDC_DEBUGGER_DISASSEMBLY)) 
     { 
      SetBkColor((HDC)wParam, RGB(255, 255, 255)); 
      return (LRESULT) GetStockObject(DC_BRUSH); 
     } 
     break; 

Я хочу сделать собственный цвет фона за определенной линией. Мой нормальный BG там белый, и для этой линии я хочу, скажем, синий.

Я попытался использовать WM_PAINT для элемента управления Edit, но мне кажется, что мне нужно снова нарисовать текст, или исходный текст элемента управления будет невидим, пока я его не выберу. И если я вручную нарисую текст, он не будет прокручиваться так же, как исходный текст.

+0

Как кажется, это ориентировано на линию, вместо этого используется элемент управления списком? – alk

+0

Я бы хотел, если бы он был создан мной изначально. Здесь я должен настроить существующий элемент управления, с большим количеством логики, уже полагающейся на его редактирование. – feos

+0

Связанный: http://stackoverflow.com/q/8024157/694576 – alk

ответ

1

Если вам абсолютно необходимо иметь элемент управления редактированием, то я не вижу решения. Однако с некоторой настройкой вы можете использовать расширенный элемент управления редактированием. Он принимает большинство тех же сообщений, что и элемент управления редактирования. Трюк будет использовать SetCharFormat для установки формата строки, которую вы хотите изменить.

+0

Я уже пытаюсь переключиться на него, и у него нет обычного контекстного меню Edit Control имеет: Копировать, Вставить, Выбрать все и т. Д. В настоящее время я пытаюсь создать собственное меню. Есть ли простой способ заставить его отображать стандартное текстовое меню, или мне нужно его вручную создать? – feos

+0

Думаю, вам нужно катить собственный обработчик и меню. –

+0

После того, как я полностью перешел на RichEdit, я обнаружил, что ** не может ** установить конкретные цвета для произвольной строки BG без того же самого хакера, который у меня есть с помощью Edit Control. Вам либо нужно выбрать его, либо иметь на нем курсор, либо нарисовать текст поверх своего. http://win32assembly.programminghorizon.com/tut35.html – feos

Смежные вопросы