Небольшая проблема с рисованием полос прокрутки с помощью MFC

#visual-studio #visual-c #mfc

Вопрос:

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

Я смог воспроизвести его в VS 6 и 2008 в недавно созданных проектах. Я также видел некоторые коммерческие приложения с той же проблемой. Чтобы воссоздать его:

  1. Создайте новый проект SDI с производным представлением CScrollView.
  2. Измените размер окна так, чтобы отображались обе полосы прокрутки.
  3. Перетащите другое окно поверх этого прямоугольника, чтобы увидеть проблему с перекраской.

Есть идеи, как от этого избавиться?

Комментарии:

1. Я считаю, что в демонстрационной версии вашей проблемы, особенно в части 3, в качестве предварительного условия выбрано «Показывать содержимое окна при перетаскивании».

2. Необязательно. Вы также можете просто перетащить первое окно (программу MFC) с экрана и обратно, и прямоугольник не станет недействительным.

Ответ №1:

Одним из обходных путей было бы перехватить метод OnPaint в CScrollView и в этом методе добавить код, чтобы всегда рисовать нижний угол окна клиента.

Но этот код рисования также должен был бы вызвать GetDC, чтобы получить новый CDC, чтобы он мог обойти области отсечения CDC BeginPaint , переданные сообщением WM_PAINT.

Комментарии:

1. Спасибо, и я, вероятно, в конечном итоге сделаю именно это. Я просто подумал, что есть какое-то «стандартное» исправление, так как, похоже, это будет довольно распространенной проблемой.