Обычно в Windows самым простым (но не самым эффективным) средством уменьшения мерцания является отключение обработки уведомлений WM_ERASEBKGND
. Это связано с тем, что если вы удалите фон в обработчике уведомлений, а затем нарисуете окно в обработчике WM_PAINT
, между ними будет небольшая задержка - эта задержка рассматривается как мерцание.
Вместо этого, если вы выполняете все операции стирания и рисования в обработчике WM_PAINT
, вы, как правило, увидите гораздо меньше мерцания. Это потому, что задержка между ними уменьшается. Вы по-прежнему увидите некоторое мерцание, особенно при изменении размера, потому что между этими двумя действиями все еще есть небольшая задержка, и вы не всегда можете получить доступ ко всему рисунку до следующего появления прерывания вертикального гашения для монитора. Если вы не можете использовать двойную буферизацию, то это, вероятно, самый эффективный метод, который вы сможете использовать.
Вы можете улучшить производительность рисования, следуя большинству обычных рекомендаций относительно аннулирования клиентской области - не аннулируйте все окно целиком, если в этом нет особой необходимости. Попробуйте сделать недействительными только те области, которые изменились. Также вам следует использовать функции BeginDeferWindowPos
, если вы одновременно обновляете позиции коллекции дочерних окон.