Я использую MFC в приложении C ++. У меня были элементы управления CEdit и я изменил их на CRichEditCtrl.
Приложение является графическим редактором с внутренним кодом в узлах, где TextBox хранит код в диалоге в отдельном окне от wnd с графом. Если щелкнуть узел, отобразится этот wnd и диалоговое окно (разные узлы имеют разные wnds и скрыты, когда неактивны)
Моя проблема в том, что если у меня есть более длинный текст в этом текстовом поле, вся область текстового поля становится серой. Текст все еще там, курсор может быть установлен щелчком мыши, но ничего не видно, пока я не сделаю что-то особенное. Например: выбрав текст щелчком мыши&Перетащите, строки, содержащие текст, снова белые и текст видимый. Другая возможность — прокрутка, линии, которые выходят из области видимости, будут в порядке.
Мне удалось это исправить, вызвав Invalidate для этого элемента управления, но:
На картинке вы можете видеть расширенное текстовое поле между красными полями (BG диалогового окна, содержащего элементы управления). Слева — приятный белый элемент управления с текстом. Справа тот же элемент управления после поиска, но выделен серым цветом и после нажатия на него и выбора некоторого текста с двумя «нераскрытыми» частями кода.
Любой совет, почему это происходит и / или как я могу избавиться от этого поведения?
Странно то, что, когда я экспериментировал с некоторыми решениями, Calling Invalidate () заставлял его вести себя хорошо в некоторых случаях, но вызывал UpdateWindow () после того, как недействительный объект снова запутался.
ОК, я наконец понял.
Прошу прощения за то, что я тут все испортил, похоже, что описанная мною проблема не была ключом к решению этой проблемы.
Я нашел причину всего этого в вызове этого метода CWnd для моего текстового поля
SetWindowPos(&CWnd::wndBottom, 0, 0, width, height, SWP_NOMOVE);
Когда я использовал MoveWindow(left,top,right,bottom,repaint)
все работало нормально, но когда я оставил хотя бы один SetWindowPos (установил какой-то другой элемент управления), он был прикручен.
Я не очень понимаю, почему это такая проблема для CRichEditCtrl, которая была в порядке для CEdit, поэтому, если вы знаете, ребята, дайте мне знать, пожалуйста.