Решил я создать простейший редактор формы. Начал с кнопки. Для того чтобы переместить кнопку, нужно создать квадрат, который имитирует область кнопки, а потом перемещает её туда. С этим справился без труда, квадрат рисую ч-з субклассинг кнопки, также обрабатываю сообщение от мыши. но вот незадача, как сделать так чтоб не мигала кнопка, а перерисовывать её тоже надо. Перерисовывал я квадрат вот так invoke MoveToEx,hDC,winpos.left,winpos.top,0 invoke LineTo,hDC,winpos.left,winpos.bottom invoke MoveToEx,hDC,winpos.left,winpos.bottom,0 invoke LineTo,hDC,winpos.right,winpos.bottom invoke MoveToEx,hDC,winpos.right,winpos.bottom,0 invoke LineTo,hDC,winpos.right,winpos.top invoke MoveToEx,hDC,winpos.right,winpos.top,0 invoke LineTo,hDC,winpos.left,winpos.top а вот код от мыши в субклассинге .elseif wMsg == WM_MOUSEMOVE invoke LoadCursor,NULL,IDC_ARROW .if wParam == MK_LBUTTON;&& count2 == 1 invoke LoadCursor,NULL,IDC_SIZEALL invoke SetCursor,eax invoke SetCapture,hfocus invoke GetCursorPos, addr hitpoint ;.if hitpoint.x < 7fffh ;and ;.endif invoke IfCount ;invoke MoveWindow,hwndButton1,winpos.left,winpos.top,wt,ht,1 ;invoke InvalidateRect, hwNd,NULL,FALSE .else mov count,0 .endif файл прилагаю
Кто-нибудь может сказать файл отслался? если нет возьмите его отсюда http://godfather.jino-net.ru/Real2.exe
God_Father Я так понял, тебе не нравится, когда при изменении размера или перемещении (рамкой), сама кнопка мерцает. Я правильно понял? P.S. Глюк: нажимаю на кнопку, у нее "появляется фокус ввода" - твоя рамка. Щелчок по клиентской области. Alt+Tab, Alt+Tab. При наведении на, гм..., квадрат привязки в рамке 1) курсор не меняется на нужный 2) при щелчке по данному черному квадрату приводит к странным эффектам )
Xerx ты правильно понял, что мне не нравится, когда при наведении на квадрат кнопка сама мерцает. Щелчок по клиентской области. Я пока не отсортировал хэндлы, принадлежит ли он главному окну или нет. Фокус ввода я и хочу чтоб появлялся, ибо для меня так проще обрабатывать сообщения alt+tab ибо фокуса окно не получает а так все постараюсь исправить
God_Father При перерисовке сначала заливается фон окна, потом отрисовываются дочерние контролы. Попробуй 1) ловить сообщение WM_ERASEBKGND, 2) задай окну стиль WS_CLIPCHILDREN | WS_CLIPSIBLINGS. Если не получится, то можешь скинуть исходник куда-нить?
Xerx у него же будет не 1 кнопка, замучается перерисовывать ректанглы между контролами God_Father ты наверное делаешь так: invoke InvalidateRect, hwNd,NULL,FALSE; 2 аргумент замени на область которую надо перерисовать(старая рамка: 4 раза по полоске ). чем меньше перерисовываешь, тем меньше мерцает.
Consto Фон перерисовывать не при таскании рамки, а только при реальной смене положения дочернего контрола. God_Father А вообще исходничек можно? Так проще будет всем )
я имел ввиду то, что не важно как будет перерисовываться окно при перемещении контрола, т.к. это будет не заметно, а god_fathera волнует мигание, именно, при перемещении рамки.
Если задаю такой стиль WS_CLIPCHILDREN | WS_CLIPSIBLINGS то окно так не мигает мигает квадрат, и исчезает :-( А как правильно обрабатывается WM_ERASEBKGND понятно что вызывается дефолтная проедура обработки окна, а еще что? По посту 6 я пишу так invoke InvalidateRect, hwNd,NULL,TRUE
одну полоску я за тебя сделал: Код (Text): push winpos.right mov eax,winpos.left add eax,2 mov winpos.right,eax invoke InvalidateRect, hwNd,addr winpos,0 pop winpos.right