Как сделать, чтобы окно при перемещении к границе екрана на небольшое расстояние как бы прилипало к ней, вобщем, как в винампе, напимер. Кусок кода: LOCAL rect:RECT .IF uMsg == WM_MOVE invoke GetWindowRect, hWnd, ADDR rect mov eax,rect.top mov r_top,eax mov eax,rect.left mov r_left,eax .IF r_left < 25 invoke SetWindowPos,hWnd,0,0,r_top,0,0,SWP_NOSIZE .ENDIF Но при перемещении наблюдается неприятный эффект мигания, как от этого избавиться, что добавить?
Обрабатывай WM_MOVING, в lParam'е готовый рект окна передается. Ничего моргать не будет. На примере левой границы экрана Код (Text): .elseif eax==WM_MOVING mov edx, lParam assume edx: ptr RECT mov eax,[edx].left mov ecx,[edx].right sub ecx,eax test eax,eax jns @F neg eax @@: .if eax<100 mov [edx].left,0 mov [edx].right,ecx .endif assume edx:nothing mov eax,TRUE ret Попробуй отлепи окно от края экрана ))
Дёргай вправо, только резко! Код (Text): .data rct RECT<0,0,0,0> .code ;. ;. .elseif eax==WM_MOVING mov edx, lParam assume edx: ptr RECT mov eax,[edx].left cmp eax,0 jle @F .if eax<rct.left .if rct.left <100 mov ecx,[edx].right sub ecx,eax mov [edx].left,0 mov [edx].right,ecx .endif .endif jmp store @@: mov ecx,[edx].right sub ecx,eax mov [edx].left,0 mov [edx].right,ecx store: m2m rct.left,[edx].left m2m rct.top,[edx].top m2m rct.right,[edx].right m2m rct.bottom,[edx].bottom assume edx:nothing mov eax,TRUE ret
ActioN Если немного поискать по форуму то в одном из топиков можно найти готовый пример, постил его Four-F