Приветствую всех. Есть обычное окно (или пусть диалог, разницы нет). Есть 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 полностью виден в окне родителя)?
Ессно child будет перерисовываться. Не совсем понятен вопрос. Нужно чтобы не перерисовывался по WM_RESIZE, или еще какому-либо? Можно попробовать сабклассировать child, сделав так что, рисовать будет по флагу, и из главного окна принудительно вызывать WM_PAINT для child.
Не знаю, как это на словах, вот пример когда при ресайзе парента child не дергается. Хочу сделать также, но не получается. WM_PAINT если не обрабатывать, то содержимое статика и сам он не отображаются, что тоже не есть гут. А если обрабатывать - мерцает 339095781__Static.zip
Сделал сабклассинг, только не child'a а родителя. Примерно так: Код (Text): SubclassParentProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD mov eax, uMsg .if eax==WM_SIZING mov edx,lParam assume edx: ptr RECT mov eax,StaticWidth add eax,StaticLeft add eax,10 mov ecx,[edx].right sub ecx,[edx].left .if eax>ecx invoke LockWindowUpdate,0 mov flgLock,0 .else .if (flgLock) invoke LockWindowUpdate,hStatic .endif mov flgLock,1 .endif assume edx:nothing invoke CallWindowProc,PrevParentProc,hWin,uMsg,wParam,lParam От мерцания избавился, если статик вписывается в парента. Если нет - продолжает мерцать
Убери стили класса HREDRAW и VREDRAW , тогда при изменении размера перерисовывать не будет. А если надо - рисуй сам по WM_SIZE
cresta Какой смысл сабклассить своё собственное окно? Что-то я не пойму суть проблемы... Можете приаттачить весь код тестовой проги?
Quantum Хочу сделать код, который можно цеплять без переделок к любому проекту, и оформить как либу. Что-то вроде контрола. Поэтому заранее неизвестно, что за парент будет, и чтобы не надо было подстраивать код парента под код либы. Turkish Пробовал HREDRAW и VREDRAW убирать... WM_PAINT будет обрабатываться у child'a. Только хочу сделать, чтоб обрабатывать при изменениях в child'e, а парент чтобы лишний раз своими ресайзами без необходимости не дёргал child'a через WM_PAINT. Примерно такая задача. 1958634715__Child.zip