Отрисовка окна
вобщем контекст такой - программа делает замеры каждую секунду (считывает данные с внешнего порта в соответсвующий массив). Это все надо в реальном времени (т.е. каждую секнду) отбражать в окне. Массив на 15000 элементов. Таймер утснавливается стандартный - виндовый. В процедуре обработки сообщения таймера стоит вызов считывания данных и отправки сообщения WM_PAINT через вызов функции Invalidate(TRUE); В процедуре отрисовки окна OnDraw() происходит отрисовка графика. Проблема в том, что если массив заполнен - надо отрисовать 15000 точек. Графиков может быть несколько (до 10). Что соответственно увеличивает время отрисовки графиков. Нужно уменьшить время отрисовки. Есть решение вызывать Invalidate(FALSE) и дорисовывать каждый раз по одной точке. Тогда возникает проблема при перекрытии окна - стирается часть, которая закрыта. Вопрос можно ли фильтровать стандартно сообщения WM_PAINT - узнать кто вызвал? чтобы при вызове Invalidate() из траймера не стирать фон, который был (чтобы не прорисовывать то, что уже нарисовано), а при всех других WM_PAINT прорисовывать весь массив. Может быть есть стандартная функция, которая вызывается при перекрытии окон?
В настоящий момент я использую логическую переменную, показывающаю было ли сообщение отправленно из таймера. Интересуют _СТАНДАРТНЫЕ_ методы решения.
Теперь у меня другая проблема - однооконное приложение, в нем надо повыбору из меню то график рисовать, то колонку цифр печатать. В одной функции OnDraw неохота все это реализовывать (выбор в зависимости от меню рисовать или печатать) - кто может что посоветует?
Цитата:
Originally posted by xelos
Проблему я решил через обработчик WM_ERASEBKGND.
Теперь у меня другая проблема - однооконное приложение, в нем надо повыбору из меню то график рисовать, то колонку цифр печатать. В одной функции OnDraw неохота все это реализовывать (выбор в зависимости от меню рисовать или печатать) - кто может что посоветует?
Проблему я решил через обработчик WM_ERASEBKGND.
Теперь у меня другая проблема - однооконное приложение, в нем надо повыбору из меню то график рисовать, то колонку цифр печатать. В одной функции OnDraw неохота все это реализовывать (выбор в зависимости от меню рисовать или печатать) - кто может что посоветует?
Сделай несколько дочерних диалогов, отрисовывай на каждом то что тебе нужно, а показывай только 1