Комон контролы и их мерцание при перерисовке окна.

Тема в разделе "WASM.WIN32", создана пользователем Crollspase, 29 ноя 2009.

  1. Crollspase

    Crollspase New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    75
    Приветствую всех тех, кто сюда зашёл. Понадобилось сделать так, чтобы в окне с контролами постоянно менялся цвет фона, но после изменения при быстрой многократной перерисовке коннтролы мерцают, что, ИМХО, совершенно недопустимо. Я вижу лучший выход из этого в том, чтобы запретить вывод в окно на время подготовки кадра в памяти с помощью WM_SETREDRAW, и когда картинка будет полностью готова – вывести её в окно. Однако я не уверен, будет ли при использовании WM_SETREDRAW вывод в память или нет. Другого способа для визуализации только в память без WM_SETREDRAW я не знаю.
     
  2. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    при создании окна где интенсивно рисуеш WS_CLIPCHILDREN
    заставляет исключать область занятую дочерним контролом из перерисовки контролы перестают мерцать при перерисовке родителя
    потом WS_CLIPSIBLINGS это надо задать у дочернего окна тоесть по сути контрола для того чтоб при перекрытии соседних контролов
    область перекрытия не перерисовывалась
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    osox
    C коммонконтролами не поможет - дело в том, что эти контролы создают на своих панелях (например тулбарах) свои дочерние окна (например кнопки) и при этом разработчики винды забыли применить енту саму WS_CLIPCHILDREN, отсюда и глюки с мерцанием. Применение WS_CLIPCHILDREN к самой панели ничего не даст - кнопки всё равно будут мерцать. Решение здесь только своё рисование контролов или использование сторонних библиотек для этого.
     
  4. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    а если так
    DWORD dwStyle;
    dwStyle = GetWindowLong ( hToolBar, GWL_STYLE );
    if ( !dwStyle )
    return 0;
    return SetWindowLong ( hToolBar, GWL_STYLE, dwStyle | WS_CLIPCHILDREN );
    по идее должно включить дополнительный стиль окну тулбара при перерисовке которого мерцают кнопки
     
  5. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    только что проверил у меня пишется прога там родитель со стилем WS_CLIPCHILDREN и на нем созданы тулбары статусбары комбобоксы ричедиты ничего не мерцает переключил специально тему на наилучший вид и потаскал за бордер окно контролы сидят как влитые в окно ничего не мерцает а кстати у родителя у меня еще стоит стиль CS_OWNDC тоесть по сути перерисовки родителя нет я сам за нее отвечаю но фон родителя у меня скрыт под конролами рисовать мне ничего и не приходится а вот все дочерние контролы сидят как влитые ничего не мерцает
     
  6. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    тогда план такой ставим стиль родителю CS_OWNDC
    когда надо перерисовать фон придут координаты обновления не включающие пространство под контролами собственно его и перерисовать в новый цвет при этом контролы мерцать не будут и видимая часть фона будет перерисовыватся в разные цвета
     
  7. osox

    osox New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2009
    Сообщения:
    280
    попробуй перед регистрацией класса окна CS_OWNDC
    потом создавай контролы на нем тулбары статусбары да любые конролы мерцать не будут но
    на тебя ляжет вся ответственность по отрисовке видимой части фона которую конролы не покроют
     
  8. Crollspase

    Crollspase New Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    75
    Попробовал. Контролы мерцать перестали. Спасибо.