перерисовка child'a

Тема в разделе "WASM.WIN32", создана пользователем cresta, 14 янв 2005.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Приветствую всех.

    Есть обычное окно (или пусть диалог, разницы нет). Есть child - например статик. Допустим у парента бэкколор COLOR_WINDOW, а у child'a - COLOR_BTNFACE. Почему, когда растягиваешь парента, child нервно дергается и мерцает, перерисовываясь? Код самый обычный, который делает radasm

    плюс:

    invoke CreateWindowEx,NULL,SADD("static"),NULL,WS_CHILD or WS_VISIBLE,100,50,600,400,hWin,NULL,hInstance,NULL



    Можно ли запретить перерисовывание child'a, если необходимости в этом нет (т.е. child полностью виден в окне родителя)?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Ессно child будет перерисовываться.

    Не совсем понятен вопрос. Нужно чтобы не перерисовывался по WM_RESIZE, или еще какому-либо? Можно попробовать сабклассировать child, сделав так что, рисовать будет по флагу, и из главного окна принудительно вызывать WM_PAINT для child.
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Не знаю, как это на словах, вот пример когда при ресайзе парента child не дергается. Хочу сделать также, но не получается.



    WM_PAINT если не обрабатывать, то содержимое статика и сам он не отображаются, что тоже не есть гут. А если обрабатывать - мерцает:dntknw:



    [​IMG] 339095781__Static.zip
     
  4. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta

    Указать WS_CLIPCHILDREN в стиле главного окна не помогает?
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Сделал сабклассинг, только не child'a а родителя. Примерно так:


    Код (Text):
    1. SubclassParentProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    2.    
    3.     mov eax, uMsg
    4.     .if eax==WM_SIZING
    5.         mov edx,lParam
    6.         assume edx: ptr RECT
    7.         mov eax,StaticWidth
    8.         add eax,StaticLeft
    9.         add eax,10
    10.         mov ecx,[edx].right
    11.         sub ecx,[edx].left
    12.         .if eax>ecx
    13.             invoke LockWindowUpdate,0
    14.             mov flgLock,0
    15.         .else
    16.             .if (flgLock)
    17.                 invoke LockWindowUpdate,hStatic
    18.         .endif
    19.             mov flgLock,1
    20.         .endif
    21.         assume edx:nothing
    22.         invoke CallWindowProc,PrevParentProc,hWin,uMsg,wParam,lParam




    От мерцания избавился, если статик вписывается в парента. Если нет - продолжает мерцать :dntknw:
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Quantum



    WS_CLIPCHILDREN у парента установлен.
     
  7. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    Убери стили класса HREDRAW и VREDRAW , тогда при изменении размера перерисовывать не будет. А если надо - рисуй сам по WM_SIZE
     
  8. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta



    Какой смысл сабклассить своё собственное окно? Что-то я не пойму суть проблемы... Можете приаттачить весь код тестовой проги?
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Quantum





    Хочу сделать код, который можно цеплять без переделок к любому проекту, и оформить как либу. Что-то вроде контрола. Поэтому заранее неизвестно, что за парент будет, и чтобы не надо было подстраивать код парента под код либы.



    Turkish



    Пробовал HREDRAW и VREDRAW убирать...



    WM_PAINT будет обрабатываться у child'a. Только хочу сделать, чтоб обрабатывать при изменениях в child'e, а парент чтобы лишний раз своими ресайзами без необходимости не дёргал child'a через WM_PAINT.



    Примерно такая задача.

    [​IMG] 1958634715__Child.zip
     
  10. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta



    У меня без этих стилей не мерцает. И сабклассинг тоже убрать.
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Пытался у child'a стили убирать :) Про родителя забыл :)



    Ок, спасибо! Теперь не мерцает