Моргает окно с контролами

Тема в разделе "WASM.BEGINNERS", создана пользователем ATX, 3 янв 2008.

  1. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Доброго времени суток!
    Эта тема уже муссировалась в форуме, но я ненашел для себя никаких ответов.

    Проблема - при перерисовывании окна кнопки моргают, как это устранить?
    Пишу задачу на MASM-е, сделал окно с кучей кнопок, кнопки окрашиваются в разные цвета.
    Кнопки создаю так - CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText,\
    WS_CHILD or WS_VISIBLE or BS_OWNERDRAW,\
    XBtm,YBtm,13,13,hWin,IDControl,hInstance,NULL
    Перекрашиваю их по WM_CTLCOLORSTATIC, но если их не перекрашивать, все равно они моргают.
    Как я понимаю мне нужно как-то обрабатывать WM_ERASEBKGND, или еще что-то?

    Заранее спасибо!
     
  2. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    ATX
    Попробуй стили окна WS_CLIPCHILDREN и WS_CLIPSIBLINGS, вроде так пишутся )
     
  3. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Спасибо Xerx!

    Моргание пропало, но теперь на фоне окна появились остатки текста с предидущего окна.
    С этим что-то можно сделать?
     
  4. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    ATX
    >но теперь на фоне окна появились остатки текста с предидущего окна.
    Не понял. Поподробнее можно? Скрин например.

    P.S. Насколько помню, выставление данных стилей приводит к созданию региона отласти перерисовки клиентской области, который не включает в себя все области под дочерними элементами с дескрипторами (созданных через CreateWindow('something', ...)). Либо нужно выводить текст через GDI, либо задавать цвет и кисть фона STATIC-элементов. Как-то так.
     
  5. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    ATX, а покажи, как класс самого окна регистрируешь?
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Если ставишь owner draw, то и перерисовывай по WM_DRAWITEM.
     
  7. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Тут я немного ошибся, я перерисовываю не по WM_CTLCOLORSTATIC а по WM_CTLCOLORBTN
    Перерисовывать по WM_DRAWITEM тоже пробовал - эфект точно такойже :-(
     
  8. ATX

    ATX New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    145
    Само окно создаю через DialogBoxParam со стилями (xStyle) WS_CAPTION or WS_SYSMENU or WS_VISIBLE
    А присловутые контролы:CreateWindowEx,NULL, ADDR ButtonClassName,ADDR ButtonText,\
    WS_CHILD or WS_VISIBLE or BS_OWNERDRAW,\
    XBtm,YBtm,13,13,hWin,IDControl,hInstance,NULL
    С классом "button"
     
  9. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    По логике, если окно создано со стилем WS_CLIPCHILDREN и у кнопок стиль BS_OWNERDRAW, то при перерисовке область под кнопками закрашивается текущей кистью окна.
    ATX, ты можешь выложить весь код архивом? Или хотя бы нужную часть.