Мерцание в GDI+

Тема в разделе "WASM.WIN32", создана пользователем Vasil, 19 окт 2006.

  1. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Ребята, подскажите плз!
    Не могу сообразить, как в GDI+ можно избежать мерцания, при выводе на экран?
    В обычной GDI всё очень просто: с помощью блиттинга (BitBlt), ...
     
  2. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    В структуре, которая передается в RegisterClassEx, есть член style, в нем есть флаги, которые отвечают за перерисовку окна
     
  3. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    CS_WREDRAW, CS_HREDRAW
     
  4. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Rustem
    CS_WREDRAW, CS_HREDRAW?
    Наверно, ты имеешь ввиду стили перерисовки окна при изменении размеров по вертикали и по горизонтали:
    CS_HREDRAW or CS_VREDRAW...

    А если, я заставляю перерисовать окно не при изменении размера, а, например, при перемещении мыши по окну? Что тогда?

    Мне почему-то кажется, что нужно что-то выключить, а потом включить. Или рисовать в памяти (CompatibleDC, CompatibleBitmap, ...), как в обычной GDI...
    Но как это делается в GDI+ я не догоняю :dntknw:
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Vasil
    Можно рисовать без мерцания и прямо на экран, если хорошо понимать из-за чего происходит мерцание. В противном случае, спасает двойной буфер.

    Погугли по GDI+ flicker double buffer. Есть несколько рабочих методов.
     
  6. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Vasil
    Тут Rustem дал правильное направление при регистрации класса:
    mov [wc.hbrBackground], 0
    иначе винда сначала сама заливает окно Backgroundом, а только потом передаёт тебе возможность рисовать, так что никакие буферизации от этого не лечат :)))