Непрерывные перерисовки событий в Windows-7, wxWidgets - PullRequest
0 голосов
/ 23 августа 2011

В Windows-7 мое приложение получает непрерывные события перерисовки из окон.Я использую wxWidgets.

Проблема не возникает:

  • В winXP,
  • В Linux,

в режиме отладки Visual Studio (2010)

Эта проблема возникает только в Widows-7, когда приложение много перерисовывает и рисование занимает более 5 секунд.Если я отключу кое-что из того, что нужно перерисовать, и это не займет много времени, это нормально.

Я вызываю wxPaintDC dc(this); в обработчике события рисования, так что это не проблема.

Я тоже пытался DwmFlush.Я помещаю его в обработчик событий перерисовки, а также в код рисования.

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

Использование wxYield в цикле отрисовки, похоже, помогло. Спасибо за вклад.

0 голосов
/ 24 августа 2011

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

Характер кэша зависит от характера ваших расчетов.Концептуально самым простым будет растровое изображение в памяти, из которого пиксели могут быть скопированы при необходимости.В действительности это подходит только в том случае, если в расчетах учитывается цвет отдельных пикселей и используется схема двойной буферизации.Возможно, вы можете хранить что-то вроде геометрических примитивов (линий, квадратов и т. Д.) И перерисовывать их.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...