Здравствуйте, Stanislav V. Zudin, Вы писали:
А>>Спасибо. Это уже освоено. У меня больше интересует ключевое слово WM_ERASEBKGND,
А>>что бы оптимизировать отрисовку большого количества дочерних окон.
SVZ>Гм, WM_ERASEBKGND вместе с "большим количеством дочерних окон" — интересное сочетание.
SVZ>Скины?
SVZ>Т.к. задача не ясна, а ты не колешься, то для начала напомню про флаг WS_CLIPCHILDREN.
SVZ>Если дочерних контролов действительно много и это действительно необходимо, то возможно стоит перейти на windowless контролы. Например посмотреть в сторону htmlayout. С MFC оно хорошо стыкуется.
Ситуация в следующем.
Имеется самописный сплитер (стиль сплитера WS_CLIPSIBLINGS | WS_CLIPCHILDREN).
В правой части которого размещается окно(стиль окна WS_CLIPSIBLINGS). Окно содержит стандартные элементы управления и OwnerDraw лист-контрол. В процессе работы периодически в Окно прилетает WM_ERASEBKGND . Оно приходит на изменения размера и еще в некоторых случаях (например после того как пропадает тул-тип на лист-контроле). Если я оставляю обработку WM_ERASEBKGND стандартную, то после пропадания тул-типа остается очищенная область лист-контрола и перерисовка лист-контролу не приходит.
1-ый вариант:
В обработчик WM_ERASEBKGND Окна я добавил принудительную перерисовку лист-контрола.
Все Ок! Но выяснилось НО, когда подключаемся удаленно то видим, что лист-контрол после каждого тул-типа заметно перерисовывается(мерцает).
2-ой вариант:
В обработчике WM_ERASEBKGND Окна я убрал перерисовку и всегда возвращаю TRUE. Мерцание прекратилось. Возникла другая проблема. Когда мы уменьшаем размер Окна сплитером, т.е. сдвигаем его вправо, лист-контрол сдвигается вправо и заезжает на ту область окна которую лист-контрол не занимает.
При этом лист-контрол сам себя корректно отрисовывает в новых размерах. Когда увеличиваем размер окна, т.е. двигаем сплитер влево, то Окно перерисовывается корректно и мусор исчезает.
По требованию использовать windowless контролы нельзя.
Во в связи с этим мне бы и хотелось узнать больше про WM_ERASEBKGND и про механизм перерисовки.