Flicker-free диалог

Тема в разделе "WASM.WIN32", создана пользователем Four-F, 6 дек 2004.

  1. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Есть диалог, на нёго накиданы контролы. Диалоаговое окно можно изменять в размере, при этом все контролы масштабируются. Всё это, естественно, жутко мигает. Вопрос: как избавиться от мигания? Про основные методы: duble-buffering, wc.style = 0, WM_ERASEBKGND: return 1 ... я знаю, но не понятно как их прикрутить в этом случае.
     
  2. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    GetWindowLong/SetWindowLong с GWL_STYLE не пробовал? Еще зависит от того как контролы рисуются - я обычно в обработчике WM_PAINT уже заранее подготовленный DC на DC контрола кидаю.
     
  3. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    На сайте Cath22 есть туториал про мерцание. Может, возня с регионами подойдет? Исключить из прорисовки окна регионы, которые займут контролы, - этакий предварительный ClipChildren, должно мягче рисоваться.
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    masquer, GWL_STYLE я не пробовал, т.к. не понятно какой стиль ставить. WS_CLIPCHILDREN не помогает. "DC на DC" - на очень понял. Можешь что-нить мыльнуть (не срочно).



    Arvensis, Джеймса Брауна я читал, но всё это не подходит или я не знаю как прикрутить. Контролы то все себя тоже перерисовывают. Т.е. мерцает не собственно поверхность диалога а сами контролы. Что ж мне все их сабклассить?
     
  5. Dylan

    Dylan New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2004
    Сообщения:
    17
    Адрес:
    Russia
    Старый такой туториал был по этой теме на английском... Нужно создать dc в памяти, там прорисовать, а только потом перерисовать на само окно...



    пример из туториала (11 кБайт), можешь в теме про применение avifil32.dll посмотреть, я там так и делал...

    [​IMG] _358802947__flicker.rar
     
  6. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Этот тутор я тоже знаю. Там используется обыкновенный duble-buffering.



    Вобщем, похоже, действительно придётся КАЖДЫЙ :dntknw:(( контрол сабклассить и каждому duble-buffering делать.



    masquer тут ещё идейку в мыло подкинул... Если будет рабочий пример - выложу.



    ЗЫ: Жаль, что нет простого решения.
     
  7. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    в XP есть стиль WS_EX_COMPOSITED.
     
  8. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Да, интересный флажок. Хотя стандартные "Открыть"/"Сохранить как" диалоги в ХР его не используют, но при этом не мерцают.



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