mfc RichTextBox2.0 серый

Я использую MFC в приложении C ++. У меня были элементы управления CEdit и я изменил их на CRichEditCtrl.
Приложение является графическим редактором с внутренним кодом в узлах, где TextBox хранит код в диалоге в отдельном окне от wnd с графом. Если щелкнуть узел, отобразится этот wnd и диалоговое окно (разные узлы имеют разные wnds и скрыты, когда неактивны)

Моя проблема в том, что если у меня есть более длинный текст в этом текстовом поле, вся область текстового поля становится серой. Текст все еще там, курсор может быть установлен щелчком мыши, но ничего не видно, пока я не сделаю что-то особенное. Например: выбрав текст щелчком мыши&Перетащите, строки, содержащие текст, снова белые и текст видимый. Другая возможность — прокрутка, линии, которые выходят из области видимости, будут в порядке.

Мне удалось это исправить, вызвав Invalidate для этого элемента управления, но:

  1. Я не очень понимаю, почему это происходит
  2. Я реализовал поиск и выделил найденные слова в тексте, но это выделение по-прежнему происходит вместо выбора первого текста. При выборе второго слова в этом узле и элементе управления, все текстовое поле снова становится чистым и работает, как и должно, но при выходе с результатами поиска ситуация повторяется.

На картинке вы можете видеть расширенное текстовое поле между красными полями (BG диалогового окна, содержащего элементы управления). Слева — приятный белый элемент управления с текстом. Справа тот же элемент управления после поиска, но выделен серым цветом и после нажатия на него и выбора некоторого текста с двумя «нераскрытыми» частями кода.

Любой совет, почему это происходит и / или как я могу избавиться от этого поведения?

Сравните хорошее состояние и испортило серое состояние RichtextBox

Странно то, что, когда я экспериментировал с некоторыми решениями, Calling Invalidate () заставлял его вести себя хорошо в некоторых случаях, но вызывал UpdateWindow () после того, как недействительный объект снова запутался.

1

Решение

ОК, я наконец понял.

Прошу прощения за то, что я тут все испортил, похоже, что описанная мною проблема не была ключом к решению этой проблемы.

Я нашел причину всего этого в вызове этого метода CWnd для моего текстового поля

SetWindowPos(&CWnd::wndBottom, 0, 0, width, height, SWP_NOMOVE);

Когда я использовал MoveWindow(left,top,right,bottom,repaint) все работало нормально, но когда я оставил хотя бы один SetWindowPos (установил какой-то другой элемент управления), он был прикручен.

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

0

Другие решения


По вопросам рекламы [email protected]